shithub: furgit

Download patch

ref: 0109f0903d8e18d110d6b9456f9a1fb4501e62fc
parent: 9da262c92189e4007834bf2023f0c032f2a1a0d9
author: Runxi Yu <runxiyu@umich.edu>
date: Sun Mar 29 07:05:46 EDT 2026

object/type, format/packfile: API cleanups

--- a/format/packfile/header.go
+++ b/format/packfile/header.go
@@ -3,7 +3,7 @@
 // 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
 }
--- a/format/packfile/ingest/drain.go
+++ b/format/packfile/ingest/drain.go
@@ -4,7 +4,6 @@
 	"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 @@
 
 	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"}
--- a/format/packfile/ingest/entry.go
+++ b/format/packfile/ingest/entry.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -54,7 +53,7 @@
 
 	record.crc32 = crc
 
-	if packfmt.IsBaseObjectType(record.packedType) {
+	if record.packedType.IsBaseObject() {
 		record.objectID = oid
 		record.realType = record.packedType
 		record.resolved = true
--- a/format/packfile/ingest/header.go
+++ b/format/packfile/ingest/header.go
@@ -36,7 +36,7 @@
 	}
 
 	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),
 		}
--- a/format/packfile/ingest/record_content.go
+++ b/format/packfile/ingest/record_content.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -10,7 +9,7 @@
 // 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)
 	}
 
--- a/format/packfile/ingest/record_resolve.go
+++ b/format/packfile/ingest/record_resolve.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -25,7 +24,7 @@
 		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
--- a/format/packfile/object_type.go
+++ /dev/null
@@ -1,16 +1,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
-	}
-}
--- a/object/store/packed/delta_build_chain.go
+++ b/object/store/packed/delta_build_chain.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -26,7 +25,7 @@
 			return deltaChain{}, err
 		}
 
-		if packfmt.IsBaseObjectType(meta.ty) {
+		if meta.ty.IsBaseObject() {
 			chain.baseLoc = current
 			chain.baseType = meta.ty
 
--- a/object/store/packed/delta_resolve_chain_start.go
+++ b/object/store/packed/delta_resolve_chain_start.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -38,7 +37,7 @@
 		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")
 	}
 
--- 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 @@
 	}
 
 	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
--- a/object/store/packed/pack.go
+++ b/object/store/packed/pack.go
@@ -47,7 +47,7 @@
 	}
 
 	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)
--- a/object/store/packed/read_header_resolve.go
+++ b/object/store/packed/read_header_resolve.go
@@ -3,7 +3,6 @@
 import (
 	"fmt"
 
-	packfmt "codeberg.org/lindenii/furgit/format/packfile"
 	objecttype "codeberg.org/lindenii/furgit/object/type"
 )
 
@@ -26,7 +25,7 @@
 		}
 
 		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 @@
 			}
 		}
 
-		if packfmt.IsBaseObjectType(meta.ty) {
+		if meta.ty.IsBaseObject() {
 			return meta.ty, declaredSize, nil
 		}
 
--- a/object/store/packed/read_reader.go
+++ b/object/store/packed/read_reader.go
@@ -5,7 +5,6 @@
 	"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 @@
 		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 @@
 		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)
--- a/object/store/packed/read_size.go
+++ b/object/store/packed/read_size.go
@@ -3,7 +3,6 @@
 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 @@
 		return 0, err
 	}
 
-	if packfmt.IsBaseObjectType(meta.ty) {
+	if meta.ty.IsBaseObject() {
 		return meta.size, nil
 	}
 
--- a/object/type/objecttype.go
+++ b/object/type/objecttype.go
@@ -14,3 +14,16 @@
 	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
+	}
+}
--