aboutsummaryrefslogtreecommitdiff
path: root/objecttype
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-20 22:16:00 +0800
committerGravatar Runxi Yu2026-02-20 22:16:00 +0800
commit18c460be20d78813afafd04077e9970f1d22f364 (patch)
treea67d4a4a79d0cd45ab3c6fe3b7eb3f66828cc1ab /objecttype
parentobject: Add tests (diff)
signatureNo signature
objecttype: Factor out object types
Diffstat (limited to 'objecttype')
-rw-r--r--objecttype/objecttype.go55
1 files changed, 55 insertions, 0 deletions
diff --git a/objecttype/objecttype.go b/objecttype/objecttype.go
new file mode 100644
index 00000000..dcf3ca03
--- /dev/null
+++ b/objecttype/objecttype.go
@@ -0,0 +1,55 @@
+// Package objecttype defines Git object type identifiers.
+package objecttype
+
+// Type mirrors Git object type tags in packfiles.
+type Type uint8
+
+const (
+ TypeInvalid Type = 0
+ TypeCommit Type = 1
+ TypeTree Type = 2
+ TypeBlob Type = 3
+ TypeTag Type = 4
+ TypeFuture Type = 5
+ TypeOfsDelta Type = 6
+ TypeRefDelta Type = 7
+)
+
+const (
+ typeNameBlob = "blob"
+ typeNameTree = "tree"
+ typeNameCommit = "commit"
+ typeNameTag = "tag"
+)
+
+// ParseName parses a canonical Git object type name.
+func ParseName(name string) (Type, bool) {
+ switch name {
+ case typeNameBlob:
+ return TypeBlob, true
+ case typeNameTree:
+ return TypeTree, true
+ case typeNameCommit:
+ return TypeCommit, true
+ case typeNameTag:
+ return TypeTag, true
+ default:
+ return TypeInvalid, false
+ }
+}
+
+// Name returns the canonical Git object type name.
+func Name(ty Type) (string, bool) {
+ switch ty {
+ case TypeBlob:
+ return typeNameBlob, true
+ case TypeTree:
+ return typeNameTree, true
+ case TypeCommit:
+ return typeNameCommit, true
+ case TypeTag:
+ return typeNameTag, true
+ default:
+ return "", false
+ }
+}