diff options
| -rw-r--r-- | format/packfile/header.go | 4 | ||||
| -rw-r--r-- | format/packfile/ingest/drain.go | 3 | ||||
| -rw-r--r-- | format/packfile/ingest/entry.go | 3 | ||||
| -rw-r--r-- | format/packfile/ingest/header.go | 2 | ||||
| -rw-r--r-- | format/packfile/ingest/record_content.go | 3 | ||||
| -rw-r--r-- | format/packfile/ingest/record_resolve.go | 3 | ||||
| -rw-r--r-- | format/packfile/object_type.go | 16 | ||||
| -rw-r--r-- | object/store/packed/delta_build_chain.go | 3 | ||||
| -rw-r--r-- | object/store/packed/delta_resolve_chain_start.go | 3 | ||||
| -rw-r--r-- | object/store/packed/delta_resolve_content.go | 7 | ||||
| -rw-r--r-- | object/store/packed/pack.go | 2 | ||||
| -rw-r--r-- | object/store/packed/read_header_resolve.go | 5 | ||||
| -rw-r--r-- | object/store/packed/read_reader.go | 5 | ||||
| -rw-r--r-- | object/store/packed/read_size.go | 3 | ||||
| -rw-r--r-- | object/type/objecttype.go | 13 |
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 + } +} |
