diff options
| author | 2026-03-29 11:13:33 +0000 | |
|---|---|---|
| committer | 2026-03-29 11:13:33 +0000 | |
| commit | 301bb73dcad265af9c4b1028d7f33863c7b607d0 (patch) | |
| tree | a4ad4af2ca7689e1f5cfbec90c05988d61154a7c /object | |
| parent | object/type, format/packfile: API cleanups (diff) | |
| signature | No signature | |
object/type: Use table structure v0.1.143
Diffstat (limited to 'object')
| -rw-r--r-- | object/type/details.go | 10 | ||||
| -rw-r--r-- | object/type/is_base.go | 7 | ||||
| -rw-r--r-- | object/type/name.go | 39 | ||||
| -rw-r--r-- | object/type/parse.go | 8 | ||||
| -rw-r--r-- | object/type/table.go | 21 | ||||
| -rw-r--r-- | object/type/type.go (renamed from object/type/objecttype.go) | 13 |
6 files changed, 50 insertions, 48 deletions
diff --git a/object/type/details.go b/object/type/details.go new file mode 100644 index 00000000..17bdcfd4 --- /dev/null +++ b/object/type/details.go @@ -0,0 +1,10 @@ +package objecttype + +type typeDetails struct { + name string + isBaseObject bool +} + +func (ty Type) details() typeDetails { + return typeTable[ty] +} diff --git a/object/type/is_base.go b/object/type/is_base.go new file mode 100644 index 00000000..cdc11f5b --- /dev/null +++ b/object/type/is_base.go @@ -0,0 +1,7 @@ +package objecttype + +// IsBaseObject reports whether ty is one of the four canonical Git object +// types encoded directly in pack entries. +func (ty Type) IsBaseObject() bool { + return ty.details().isBaseObject +} diff --git a/object/type/name.go b/object/type/name.go index d5636be9..c95fe90b 100644 --- a/object/type/name.go +++ b/object/type/name.go @@ -1,42 +1,11 @@ package objecttype -const ( - typeNameBlob = "blob" - typeNameTree = "tree" - typeNameCommit = "commit" - typeNameTag = "tag" -) - -// Parse parses a canonical Git object type name. -func Parse(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 (ty Type) Name() (string, bool) { - switch ty { - case TypeBlob: - return typeNameBlob, true - case TypeTree: - return typeNameTree, true - case TypeCommit: - return typeNameCommit, true - case TypeTag: - return typeNameTag, true - case TypeInvalid, TypeFuture, TypeOfsDelta, TypeRefDelta: - return "", false - default: + details := ty.details() + if details.name == "" { return "", false } + + return details.name, true } diff --git a/object/type/parse.go b/object/type/parse.go new file mode 100644 index 00000000..bc5ca736 --- /dev/null +++ b/object/type/parse.go @@ -0,0 +1,8 @@ +package objecttype + +// Parse parses a canonical Git object type name. +func Parse(name string) (Type, bool) { + ty, ok := typeByName[name] + + return ty, ok +} diff --git a/object/type/table.go b/object/type/table.go new file mode 100644 index 00000000..19cc760d --- /dev/null +++ b/object/type/table.go @@ -0,0 +1,21 @@ +package objecttype + +//nolint:gochecknoglobals +var typeTable = [...]typeDetails{ + TypeInvalid: {}, + TypeCommit: {name: "commit", isBaseObject: true}, + TypeTree: {name: "tree", isBaseObject: true}, + TypeBlob: {name: "blob", isBaseObject: true}, + TypeTag: {name: "tag", isBaseObject: true}, + TypeFuture: {}, + TypeOfsDelta: {}, + TypeRefDelta: {}, +} + +//nolint:gochecknoglobals +var typeByName = map[string]Type{ + typeTable[TypeCommit].name: TypeCommit, + typeTable[TypeTree].name: TypeTree, + typeTable[TypeBlob].name: TypeBlob, + typeTable[TypeTag].name: TypeTag, +} diff --git a/object/type/objecttype.go b/object/type/type.go index d803cadf..18e0ac35 100644 --- a/object/type/objecttype.go +++ b/object/type/type.go @@ -14,16 +14,3 @@ const ( TypeOfsDelta Type = 6 TypeRefDelta Type = 7 ) - -// IsBaseObject reports whether ty is one of the four canonical Git object -// types encoded directly in pack entries. -func (ty Type) IsBaseObject() bool { - switch ty { - case TypeCommit, TypeTree, TypeBlob, TypeTag: - return true - case TypeInvalid, TypeFuture, TypeOfsDelta, TypeRefDelta: - return false - default: - return false - } -} |
