shithub: furgit

Download patch

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
+	}
+}
--