aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-06-12 14:19:54 +0000
committerGravatar Runxi Yu2026-06-12 14:19:54 +0000
commit7a60c533668747f906a1d1d234f2be6d32fca1d8 (patch)
tree8bb5a9d96c28a5927642f86e5a8f8d56c2f13810 /object
parentinternal/format/packfile: Add header parser (diff)
object/store/packed: Use the new format/packfile header parser
Diffstat (limited to 'object')
-rw-r--r--object/store/packed/pack.go26
1 files changed, 8 insertions, 18 deletions
diff --git a/object/store/packed/pack.go b/object/store/packed/pack.go
index 55991c2c..cdf86203 100644
--- a/object/store/packed/pack.go
+++ b/object/store/packed/pack.go
@@ -2,7 +2,6 @@ package packed
import (
"bytes"
- "encoding/binary"
"errors"
"fmt"
"os"
@@ -14,16 +13,10 @@ import (
"lindenii.org/go/lgo/intconv"
)
-// packHeaderLen is the size of the on-disk pack header:
-// signature, version, and object count.
-const packHeaderLen = 12
-
var (
- errPackTruncated = errors.New("truncated")
- errPackBadSignature = errors.New("bad signature")
- errPackUnsupportedVersion = errors.New("unsupported pack version")
- errPackCountMismatch = errors.New("object count differs from index")
- errPackTrailerMismatch = errors.New("trailer hash differs from index")
+ errPackTruncated = errors.New("truncated")
+ errPackCountMismatch = errors.New("object count differs from index")
+ errPackTrailerMismatch = errors.New("trailer hash differs from index")
)
// pack is one discovered pack:
@@ -104,19 +97,16 @@ func mapFile(root *os.Root, name string) (*mmap.Mmap, error) {
// validatePackData checks one mapped pack
// against the pack format and its index.
func validatePackData(data []byte, idx *packidx.Packidx, hashSize int) error {
- if len(data) < packHeaderLen+hashSize {
+ if len(data) < packfile.HeaderLen+hashSize {
return errPackTruncated
}
- if binary.BigEndian.Uint32(data) != packfile.Signature {
- return errPackBadSignature
- }
-
- if !packfile.SupportedVersion(binary.BigEndian.Uint32(data[4:])) {
- return errPackUnsupportedVersion
+ header, err := packfile.ParseHeader(data)
+ if err != nil {
+ return err
}
- count := uint64(binary.BigEndian.Uint32(data[8:]))
+ count := uint64(header.ObjectCount)
numObjects, err := intconv.IntToUint64(idx.NumObjects())
if err != nil {