aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-29 11:05:46 +0000
committerGravatar Runxi Yu2026-03-29 11:05:46 +0000
commit0109f0903d8e18d110d6b9456f9a1fb4501e62fc (patch)
treef1b95c7c64d79fa0dab0251661600a299d8aefcb
parentobject{,/type}: Fix up API shape (diff)
signatureNo signature
object/type, format/packfile: API cleanups
-rw-r--r--format/packfile/header.go4
-rw-r--r--format/packfile/ingest/drain.go3
-rw-r--r--format/packfile/ingest/entry.go3
-rw-r--r--format/packfile/ingest/header.go2
-rw-r--r--format/packfile/ingest/record_content.go3
-rw-r--r--format/packfile/ingest/record_resolve.go3
-rw-r--r--format/packfile/object_type.go16
-rw-r--r--object/store/packed/delta_build_chain.go3
-rw-r--r--object/store/packed/delta_resolve_chain_start.go3
-rw-r--r--object/store/packed/delta_resolve_content.go7
-rw-r--r--object/store/packed/pack.go2
-rw-r--r--object/store/packed/read_header_resolve.go5
-rw-r--r--object/store/packed/read_reader.go5
-rw-r--r--object/store/packed/read_size.go3
-rw-r--r--object/type/objecttype.go13
15 files changed, 30 insertions, 45 deletions
diff --git a/format/packfile/header.go b/format/packfile/header.go
index bc859a55..5f4e4508 100644
--- a/format/packfile/header.go
+++ b/format/packfile/header.go
@@ -3,7 +3,7 @@ package packfile
// Signature is the 4-byte "PACK" magic at the start of pack files.
const Signature = 0x5041434b
-// VersionSupported reports whether one pack version is supported.
-func VersionSupported(version uint32) bool {
+// SupportedVersion reports whether one pack version is supported.
+func SupportedVersion(version uint32) bool {
return version == 2 || version == 3
}
diff --git a/format/packfile/ingest/drain.go b/format/packfile/ingest/drain.go
index aa96db8a..7179a823 100644
--- a/format/packfile/ingest/drain.go
+++ b/format/packfile/ingest/drain.go
@@ -4,7 +4,6 @@ import (
"fmt"
"io"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
"codeberg.org/lindenii/furgit/internal/compress/zlib"
objectheader "codeberg.org/lindenii/furgit/object/header"
objectid "codeberg.org/lindenii/furgit/object/id"
@@ -25,7 +24,7 @@ func drainEntryPayload(state *ingestState, record objectRecord) (int64, objectid
var total int64
- if packfmt.IsBaseObjectType(record.packedType) {
+ if record.packedType.IsBaseObject() {
header, ok := objectheader.Encode(record.packedType, record.declaredSize)
if !ok {
return 0, zero, &MalformedPackEntryError{Offset: record.offset, Reason: "encode object header"}
diff --git a/format/packfile/ingest/entry.go b/format/packfile/ingest/entry.go
index 50fbe728..363e213c 100644
--- a/format/packfile/ingest/entry.go
+++ b/format/packfile/ingest/entry.go
@@ -3,7 +3,6 @@ package ingest
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -54,7 +53,7 @@ func scanOneEntry(state *ingestState, startOffset uint64) (uint64, error) {
record.crc32 = crc
- if packfmt.IsBaseObjectType(record.packedType) {
+ if record.packedType.IsBaseObject() {
record.objectID = oid
record.realType = record.packedType
record.resolved = true
diff --git a/format/packfile/ingest/header.go b/format/packfile/ingest/header.go
index 6a214828..5fae4c41 100644
--- a/format/packfile/ingest/header.go
+++ b/format/packfile/ingest/header.go
@@ -36,7 +36,7 @@ func parseAndValidatePackHeader(hdr [packHeaderSize]byte) (HeaderInfo, error) {
}
version := binary.BigEndian.Uint32(hdr[4:8])
- if !packfile.VersionSupported(version) {
+ if !packfile.SupportedVersion(version) {
return HeaderInfo{}, &InvalidPackHeaderError{
Reason: fmt.Sprintf("unsupported version %d", version),
}
diff --git a/format/packfile/ingest/record_content.go b/format/packfile/ingest/record_content.go
index 4f8787ea..c66a1234 100644
--- a/format/packfile/ingest/record_content.go
+++ b/format/packfile/ingest/record_content.go
@@ -3,14 +3,13 @@ package ingest
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
// readBaseRecordContent reads canonical base content for one non-delta record.
func readBaseRecordContent(state *ingestState, idx int) (objecttype.Type, []byte, error) {
record := state.records[idx]
- if !packfmt.IsBaseObjectType(record.packedType) {
+ if !record.packedType.IsBaseObject() {
return objecttype.TypeInvalid, nil, fmt.Errorf("packfile/ingest: record %d is not a base object", idx)
}
diff --git a/format/packfile/ingest/record_resolve.go b/format/packfile/ingest/record_resolve.go
index fc5b9dca..7a9471dc 100644
--- a/format/packfile/ingest/record_resolve.go
+++ b/format/packfile/ingest/record_resolve.go
@@ -3,7 +3,6 @@ package ingest
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -25,7 +24,7 @@ func resolveRecord(state *ingestState, idx int, visiting map[int]struct{}) (obje
return ty, content, nil
}
- if packfmt.IsBaseObjectType(record.packedType) {
+ if record.packedType.IsBaseObject() {
ty, content, err := readBaseRecordContent(state, idx)
if err != nil {
return objecttype.TypeInvalid, nil, err
diff --git a/format/packfile/object_type.go b/format/packfile/object_type.go
deleted file mode 100644
index 8382baa9..00000000
--- a/format/packfile/object_type.go
+++ /dev/null
@@ -1,16 +0,0 @@
-package packfile
-
-import objecttype "codeberg.org/lindenii/furgit/object/type"
-
-// IsBaseObjectType reports whether ty is one of the four canonical object
-// types encoded directly in pack entries.
-func IsBaseObjectType(ty objecttype.Type) bool {
- switch ty {
- case objecttype.TypeCommit, objecttype.TypeTree, objecttype.TypeBlob, objecttype.TypeTag:
- return true
- case objecttype.TypeInvalid, objecttype.TypeFuture, objecttype.TypeOfsDelta, objecttype.TypeRefDelta:
- return false
- default:
- return false
- }
-}
diff --git a/object/store/packed/delta_build_chain.go b/object/store/packed/delta_build_chain.go
index 59f83542..a528f705 100644
--- a/object/store/packed/delta_build_chain.go
+++ b/object/store/packed/delta_build_chain.go
@@ -3,7 +3,6 @@ package packed
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -26,7 +25,7 @@ func (store *Store) deltaBuildChain(start location) (deltaChain, error) {
return deltaChain{}, err
}
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
chain.baseLoc = current
chain.baseType = meta.ty
diff --git a/object/store/packed/delta_resolve_chain_start.go b/object/store/packed/delta_resolve_chain_start.go
index 047073cb..ac214576 100644
--- a/object/store/packed/delta_resolve_chain_start.go
+++ b/object/store/packed/delta_resolve_chain_start.go
@@ -3,7 +3,6 @@ package packed
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -38,7 +37,7 @@ func (store *Store) deltaResolveChainStart(chain deltaChain) (objecttype.Type, [
return objecttype.TypeInvalid, nil, 0, err
}
- if !packfmt.IsBaseObjectType(meta.ty) {
+ if !meta.ty.IsBaseObject() {
return objecttype.TypeInvalid, nil, 0, fmt.Errorf("objectstore/packed: delta chain base is not a base object")
}
diff --git a/object/store/packed/delta_resolve_content.go b/object/store/packed/delta_resolve_content.go
index 9a24873b..7b4d5319 100644
--- a/object/store/packed/delta_resolve_content.go
+++ b/object/store/packed/delta_resolve_content.go
@@ -1,9 +1,6 @@
package packed
-import (
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
- objecttype "codeberg.org/lindenii/furgit/object/type"
-)
+import objecttype "codeberg.org/lindenii/furgit/object/type"
// deltaResolveContent resolves one object's content bytes from its pack location.
func (store *Store) deltaResolveContent(start location) (objecttype.Type, []byte, error) {
@@ -18,7 +15,7 @@ func (store *Store) deltaResolveContent(start location) (objecttype.Type, []byte
}
declaredSize := meta.size
- if !packfmt.IsBaseObjectType(meta.ty) {
+ if !meta.ty.IsBaseObject() {
declaredSize, err = deltaDeclaredSizeAt(pack, meta.dataOffset)
if err != nil {
return objecttype.TypeInvalid, nil, err
diff --git a/object/store/packed/pack.go b/object/store/packed/pack.go
index 5abc6c15..928ced70 100644
--- a/object/store/packed/pack.go
+++ b/object/store/packed/pack.go
@@ -47,7 +47,7 @@ func openPackFile(name string, file *os.File, size int64) (*packFile, error) {
}
version := binary.BigEndian.Uint32(data[4:8])
- if !packfmt.VersionSupported(version) {
+ if !packfmt.SupportedVersion(version) {
_ = syscall.Munmap(data)
return nil, fmt.Errorf("objectstore/packed: pack %q unsupported version %d", name, version)
diff --git a/object/store/packed/read_header_resolve.go b/object/store/packed/read_header_resolve.go
index f61cd104..849cfbc7 100644
--- a/object/store/packed/read_header_resolve.go
+++ b/object/store/packed/read_header_resolve.go
@@ -3,7 +3,6 @@ package packed
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -26,7 +25,7 @@ func (store *Store) resolveHeaderAt(start location) (objecttype.Type, int64, err
}
if declaredSize < 0 {
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
declaredSize = meta.size
} else {
size, err := deltaDeclaredSizeAt(pack, meta.dataOffset)
@@ -38,7 +37,7 @@ func (store *Store) resolveHeaderAt(start location) (objecttype.Type, int64, err
}
}
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
return meta.ty, declaredSize, nil
}
diff --git a/object/store/packed/read_reader.go b/object/store/packed/read_reader.go
index 03e70628..8539e0bf 100644
--- a/object/store/packed/read_reader.go
+++ b/object/store/packed/read_reader.go
@@ -5,7 +5,6 @@ import (
"fmt"
"io"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
"codeberg.org/lindenii/furgit/internal/iolimit"
objectheader "codeberg.org/lindenii/furgit/object/header"
objectid "codeberg.org/lindenii/furgit/object/id"
@@ -30,7 +29,7 @@ func (store *Store) ReadReaderContent(id objectid.ObjectID) (objecttype.Type, in
return objecttype.TypeInvalid, 0, nil, err
}
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
zr, err := zlibReaderAt(pack, meta.dataOffset)
if err != nil {
return objecttype.TypeInvalid, 0, nil, err
@@ -67,7 +66,7 @@ func (store *Store) ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error)
return nil, err
}
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
header, ok := objectheader.Encode(meta.ty, meta.size)
if !ok {
return nil, fmt.Errorf("objectstore/packed: failed to encode object header for type %d", meta.ty)
diff --git a/object/store/packed/read_size.go b/object/store/packed/read_size.go
index 5e744a06..ffec8b13 100644
--- a/object/store/packed/read_size.go
+++ b/object/store/packed/read_size.go
@@ -3,7 +3,6 @@ package packed
import (
"fmt"
- packfmt "codeberg.org/lindenii/furgit/format/packfile"
objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -29,7 +28,7 @@ func (store *Store) resolveSizeAt(start location) (int64, error) {
return 0, err
}
- if packfmt.IsBaseObjectType(meta.ty) {
+ if meta.ty.IsBaseObject() {
return meta.size, nil
}
diff --git a/object/type/objecttype.go b/object/type/objecttype.go
index 18e0ac35..d803cadf 100644
--- a/object/type/objecttype.go
+++ b/object/type/objecttype.go
@@ -14,3 +14,16 @@ 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
+ }
+}