ref: 18c460be20d78813afafd04077e9970f1d22f364
parent: d26449f260cb4a02bb6949c315580ea31bc29de8
author: Runxi Yu <me@runxiyu.org>
date: Fri Feb 20 17:16:00 EST 2026
objecttype: Factor out object types
--- /dev/null
+++ b/objecttype/objecttype.go
@@ -1,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
+ }
+}
--
⑨