aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 14:21:50 +0000
committerGravatar Runxi Yu2026-03-25 14:22:01 +0000
commite4373a7e553f8523db3e99ea316e1c25d30cc059 (patch)
treec21d0b20b1c4743619a05fdfcfa676ab2642da9e /object
parent*: objecttype, objectheader -> object/type, object/header (diff)
signatureNo signature
*: objectid -> object/id
Diffstat (limited to 'object')
-rw-r--r--object/blob_parse_test.go2
-rw-r--r--object/blob_serialize_test.go2
-rw-r--r--object/commit.go2
-rw-r--r--object/commit_parse.go2
-rw-r--r--object/commit_parse_test.go2
-rw-r--r--object/commit_serialize_test.go2
-rw-r--r--object/id/algorithms.go140
-rw-r--r--object/id/errors.go10
-rw-r--r--object/id/objectid.go113
-rw-r--r--object/id/objectid_test.go184
-rw-r--r--object/parse.go2
-rw-r--r--object/resolve/exact_blob.go2
-rw-r--r--object/resolve/exact_blob_reader.go2
-rw-r--r--object/resolve/exact_commit.go2
-rw-r--r--object/resolve/exact_commit_reader.go2
-rw-r--r--object/resolve/exact_object.go2
-rw-r--r--object/resolve/exact_reader.go2
-rw-r--r--object/resolve/exact_tag.go2
-rw-r--r--object/resolve/exact_tag_reader.go2
-rw-r--r--object/resolve/exact_tree.go2
-rw-r--r--object/resolve/exact_tree_reader.go2
-rw-r--r--object/resolve/object_parse.go2
-rw-r--r--object/resolve/path.go2
-rw-r--r--object/resolve/peel_to_blob.go2
-rw-r--r--object/resolve/peel_to_blob_id.go2
-rw-r--r--object/resolve/peel_to_blob_reader.go2
-rw-r--r--object/resolve/peel_to_commit.go2
-rw-r--r--object/resolve/peel_to_commit_id.go2
-rw-r--r--object/resolve/peel_to_commit_reader.go2
-rw-r--r--object/resolve/peel_to_tag.go2
-rw-r--r--object/resolve/peel_to_tag_id.go2
-rw-r--r--object/resolve/peel_to_tag_reader.go2
-rw-r--r--object/resolve/peel_to_tree.go2
-rw-r--r--object/resolve/peel_to_tree_id.go2
-rw-r--r--object/resolve/peel_to_tree_reader.go2
-rw-r--r--object/resolve/treefs.go2
-rw-r--r--object/resolve/treefs_entry.go2
-rw-r--r--object/resolve/treefs_new.go2
-rw-r--r--object/resolve/treefs_test.go2
-rw-r--r--object/stored/stored.go2
-rw-r--r--object/tag.go2
-rw-r--r--object/tag_parse.go2
-rw-r--r--object/tag_parse_test.go2
-rw-r--r--object/tag_serialize_test.go2
-rw-r--r--object/tree.go2
-rw-r--r--object/tree_parse.go2
-rw-r--r--object/tree_parse_test.go2
-rw-r--r--object/tree_serialize_test.go2
48 files changed, 491 insertions, 44 deletions
diff --git a/object/blob_parse_test.go b/object/blob_parse_test.go
index 1cf3990f..eb8f2f56 100644
--- a/object/blob_parse_test.go
+++ b/object/blob_parse_test.go
@@ -6,7 +6,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestBlobParseFromGit(t *testing.T) {
diff --git a/object/blob_serialize_test.go b/object/blob_serialize_test.go
index 69dbe849..704811ca 100644
--- a/object/blob_serialize_test.go
+++ b/object/blob_serialize_test.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestBlobSerialize(t *testing.T) {
diff --git a/object/commit.go b/object/commit.go
index 214b9c99..f7b0d676 100644
--- a/object/commit.go
+++ b/object/commit.go
@@ -1,7 +1,7 @@
package object
import (
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/commit_parse.go b/object/commit_parse.go
index 31e215de..6578d523 100644
--- a/object/commit_parse.go
+++ b/object/commit_parse.go
@@ -5,7 +5,7 @@ import (
"errors"
"fmt"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ParseCommit decodes a commit object body.
diff --git a/object/commit_parse_test.go b/object/commit_parse_test.go
index 4dc1dea1..fae2b4c1 100644
--- a/object/commit_parse_test.go
+++ b/object/commit_parse_test.go
@@ -7,7 +7,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestCommitParseFromGit(t *testing.T) {
diff --git a/object/commit_serialize_test.go b/object/commit_serialize_test.go
index 70b3fc92..cff47b40 100644
--- a/object/commit_serialize_test.go
+++ b/object/commit_serialize_test.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestCommitSerialize(t *testing.T) {
diff --git a/object/id/algorithms.go b/object/id/algorithms.go
new file mode 100644
index 00000000..404d3bbf
--- /dev/null
+++ b/object/id/algorithms.go
@@ -0,0 +1,140 @@
+package objectid
+
+import (
+ "crypto/sha1" //#nosec gosec
+ "crypto/sha256"
+ "hash"
+)
+
+// maxObjectIDSize MUST be >= the largest supported algorithm size.
+const maxObjectIDSize = sha256.Size
+
+// Algorithm identifies the hash algorithm used for Git object IDs.
+type Algorithm uint8
+
+const (
+ AlgorithmUnknown Algorithm = iota
+ AlgorithmSHA1
+ AlgorithmSHA256
+)
+
+type algorithmDetails struct {
+ name string
+ size int
+ packHashID uint32
+ sum func([]byte) ObjectID
+ new func() hash.Hash
+}
+
+//nolint:gochecknoglobals
+var algorithmTable = [...]algorithmDetails{
+ AlgorithmUnknown: {},
+ AlgorithmSHA1: {
+ name: "sha1",
+ size: sha1.Size,
+ packHashID: 1,
+ sum: func(data []byte) ObjectID {
+ sum := sha1.Sum(data) //#nosec G401
+
+ var id ObjectID
+ copy(id.data[:], sum[:])
+ id.algo = AlgorithmSHA1
+
+ return id
+ },
+ new: sha1.New,
+ },
+ AlgorithmSHA256: {
+ name: "sha256",
+ size: sha256.Size,
+ packHashID: 2,
+ sum: func(data []byte) ObjectID {
+ sum := sha256.Sum256(data)
+
+ var id ObjectID
+ copy(id.data[:], sum[:])
+ id.algo = AlgorithmSHA256
+
+ return id
+ },
+ new: sha256.New,
+ },
+}
+
+var (
+ //nolint:gochecknoglobals
+ algorithmByName = map[string]Algorithm{}
+ //nolint:gochecknoglobals
+ supportedAlgorithms []Algorithm
+)
+
+func init() { //nolint:gochecknoinits
+ for algo := Algorithm(0); int(algo) < len(algorithmTable); algo++ {
+ info := algorithmTable[algo]
+ if info.name == "" {
+ continue
+ }
+
+ algorithmByName[info.name] = algo
+ supportedAlgorithms = append(supportedAlgorithms, algo)
+ }
+}
+
+// SupportedAlgorithms returns all object ID algorithms supported by furgit.
+// Do not mutate.
+func SupportedAlgorithms() []Algorithm {
+ return supportedAlgorithms
+}
+
+// ParseAlgorithm parses a canonical algorithm name (e.g. "sha1", "sha256").
+func ParseAlgorithm(s string) (Algorithm, bool) {
+ algo, ok := algorithmByName[s]
+
+ return algo, ok
+}
+
+// Size returns the hash size in bytes.
+func (algo Algorithm) Size() int {
+ return algo.info().size
+}
+
+// String returns the canonical algorithm name.
+func (algo Algorithm) String() string {
+ inf := algo.info()
+ if inf.name == "" {
+ return "unknown"
+ }
+
+ return inf.name
+}
+
+// HexLen returns the encoded hexadecimal length.
+func (algo Algorithm) HexLen() int {
+ return algo.Size() * 2
+}
+
+// PackHashID returns the Git pack/rev hash-id encoding for this algorithm.
+//
+// Unknown algorithms return 0.
+func (algo Algorithm) PackHashID() uint32 {
+ return algo.info().packHashID
+}
+
+// Sum computes an object ID from raw data using the selected algorithm.
+func (algo Algorithm) Sum(data []byte) ObjectID {
+ return algo.info().sum(data)
+}
+
+// New returns a new hash.Hash for this algorithm.
+func (algo Algorithm) New() (hash.Hash, error) {
+ newFn := algo.info().new
+ if newFn == nil {
+ return nil, ErrInvalidAlgorithm
+ }
+
+ return newFn(), nil
+}
+
+func (algo Algorithm) info() algorithmDetails {
+ return algorithmTable[algo]
+}
diff --git a/object/id/errors.go b/object/id/errors.go
new file mode 100644
index 00000000..8e604c44
--- /dev/null
+++ b/object/id/errors.go
@@ -0,0 +1,10 @@
+package objectid
+
+import "errors"
+
+var (
+ // ErrInvalidAlgorithm indicates an unsupported object ID algorithm.
+ ErrInvalidAlgorithm = errors.New("objectid: invalid algorithm")
+ // ErrInvalidObjectID indicates malformed object ID data.
+ ErrInvalidObjectID = errors.New("objectid: invalid object id")
+)
diff --git a/object/id/objectid.go b/object/id/objectid.go
new file mode 100644
index 00000000..8eb82969
--- /dev/null
+++ b/object/id/objectid.go
@@ -0,0 +1,113 @@
+// Package objectid provides utilities around object IDs and hash algorithms.
+package objectid
+
+import (
+ //#nosec G505
+
+ "bytes"
+ "encoding/hex"
+ "fmt"
+)
+
+// ObjectID represents a Git object ID.
+//
+//nolint:recvcheck
+type ObjectID struct {
+ algo Algorithm
+ data [maxObjectIDSize]byte
+}
+
+// Algorithm returns the object ID's hash algorithm.
+func (id ObjectID) Algorithm() Algorithm {
+ return id.algo
+}
+
+// Size returns the object ID size in bytes.
+func (id ObjectID) Size() int {
+ return id.algo.Size()
+}
+
+// String returns the canonical hex representation.
+func (id ObjectID) String() string {
+ size := id.Size()
+
+ return hex.EncodeToString(id.data[:size])
+}
+
+// Bytes returns a copy of the object ID bytes.
+func (id ObjectID) Bytes() []byte {
+ size := id.Size()
+
+ return append([]byte(nil), id.data[:size]...)
+}
+
+// RawBytes returns a direct byte slice view of the object ID bytes.
+//
+// The returned slice aliases the object ID's internal storage. Callers MUST
+// treat it as read-only and MUST NOT modify its contents.
+//
+// Use Bytes when an independent copy is required.
+func (id *ObjectID) RawBytes() []byte {
+ size := id.Size()
+
+ return id.data[:size:size]
+}
+
+// Compare lexicographically compares two object IDs by their canonical byte
+// representation.
+func Compare(left, right ObjectID) int {
+ return bytes.Compare(left.RawBytes(), right.RawBytes())
+}
+
+// Zero returns the all-zero object ID for the specified algorithm.
+func Zero(algo Algorithm) ObjectID {
+ id, err := FromBytes(algo, make([]byte, algo.Size()))
+ if err != nil {
+ panic(err)
+ }
+
+ return id
+}
+
+// ParseHex parses an object ID from hex for the specified algorithm.
+func ParseHex(algo Algorithm, s string) (ObjectID, error) {
+ var id ObjectID
+ if algo.Size() == 0 {
+ return id, ErrInvalidAlgorithm
+ }
+
+ if len(s)%2 != 0 {
+ return id, fmt.Errorf("%w: odd hex length %d", ErrInvalidObjectID, len(s))
+ }
+
+ if len(s) != algo.HexLen() {
+ return id, fmt.Errorf("%w: got %d chars, expected %d", ErrInvalidObjectID, len(s), algo.HexLen())
+ }
+
+ decoded, err := hex.DecodeString(s)
+ if err != nil {
+ return id, fmt.Errorf("%w: decode: %w", ErrInvalidObjectID, err)
+ }
+
+ copy(id.data[:], decoded)
+ id.algo = algo
+
+ return id, nil
+}
+
+// FromBytes builds an object ID from raw bytes for the specified algorithm.
+func FromBytes(algo Algorithm, b []byte) (ObjectID, error) {
+ var id ObjectID
+ if algo.Size() == 0 {
+ return id, ErrInvalidAlgorithm
+ }
+
+ if len(b) != algo.Size() {
+ return id, fmt.Errorf("%w: got %d bytes, expected %d", ErrInvalidObjectID, len(b), algo.Size())
+ }
+
+ copy(id.data[:], b)
+ id.algo = algo
+
+ return id, nil
+}
diff --git a/object/id/objectid_test.go b/object/id/objectid_test.go
new file mode 100644
index 00000000..2559be0a
--- /dev/null
+++ b/object/id/objectid_test.go
@@ -0,0 +1,184 @@
+package objectid_test
+
+import (
+ "bytes"
+ "strings"
+ "testing"
+
+ objectid "codeberg.org/lindenii/furgit/object/id"
+)
+
+func TestParseAlgorithm(t *testing.T) {
+ t.Parallel()
+
+ algo, ok := objectid.ParseAlgorithm("sha1")
+ if !ok || algo != objectid.AlgorithmSHA1 {
+ t.Fatalf("ParseAlgorithm(sha1) = (%v,%v)", algo, ok)
+ }
+
+ algo, ok = objectid.ParseAlgorithm("sha256")
+ if !ok || algo != objectid.AlgorithmSHA256 {
+ t.Fatalf("ParseAlgorithm(sha256) = (%v,%v)", algo, ok)
+ }
+
+ if _, ok := objectid.ParseAlgorithm("md5"); ok {
+ t.Fatalf("ParseAlgorithm(md5) should fail")
+ }
+}
+
+func TestParseHexRoundtrip(t *testing.T) {
+ t.Parallel()
+
+ for _, algo := range objectid.SupportedAlgorithms() {
+ t.Run(algo.String(), func(t *testing.T) {
+ t.Parallel()
+
+ hex := strings.Repeat("01", algo.Size())
+
+ id, err := objectid.ParseHex(algo, hex)
+ if err != nil {
+ t.Fatalf("ParseHex failed: %v", err)
+ }
+
+ if got := id.String(); got != hex {
+ t.Fatalf("String() = %q, want %q", got, hex)
+ }
+
+ if got := id.Size(); got != algo.Size() {
+ t.Fatalf("Size() = %d, want %d", got, algo.Size())
+ }
+
+ raw := id.Bytes()
+ if len(raw) != algo.Size() {
+ t.Fatalf("Bytes len = %d, want %d", len(raw), algo.Size())
+ }
+
+ id2, err := objectid.FromBytes(algo, raw)
+ if err != nil {
+ t.Fatalf("FromBytes failed: %v", err)
+ }
+
+ if id2.String() != hex {
+ t.Fatalf("FromBytes roundtrip = %q, want %q", id2.String(), hex)
+ }
+ })
+ }
+}
+
+func TestParseHexErrors(t *testing.T) {
+ t.Parallel()
+
+ t.Run("unknown algo", func(t *testing.T) {
+ t.Parallel()
+
+ _, err := objectid.ParseHex(objectid.AlgorithmUnknown, "00")
+ if err == nil {
+ t.Fatalf("expected ParseHex error")
+ }
+ })
+
+ for _, algo := range objectid.SupportedAlgorithms() {
+ t.Run(algo.String(), func(t *testing.T) {
+ t.Parallel()
+
+ _, err := objectid.ParseHex(algo, strings.Repeat("0", algo.HexLen()-1))
+ if err == nil {
+ t.Fatalf("expected ParseHex odd-len error")
+ }
+
+ _, err = objectid.ParseHex(algo, strings.Repeat("0", algo.HexLen()-2))
+ if err == nil {
+ t.Fatalf("expected ParseHex wrong-len error")
+ }
+
+ _, err = objectid.ParseHex(algo, "z"+strings.Repeat("0", algo.HexLen()-1))
+ if err == nil {
+ t.Fatalf("expected ParseHex invalid-hex error")
+ }
+ })
+ }
+}
+
+func TestFromBytesErrors(t *testing.T) {
+ t.Parallel()
+
+ _, err := objectid.FromBytes(objectid.AlgorithmUnknown, []byte{1, 2})
+ if err == nil {
+ t.Fatalf("expected FromBytes unknown algo error")
+ }
+
+ for _, algo := range objectid.SupportedAlgorithms() {
+ _, err = objectid.FromBytes(algo, []byte{1, 2})
+ if err == nil {
+ t.Fatalf("expected FromBytes wrong size error")
+ }
+ }
+}
+
+func TestBytesReturnsCopy(t *testing.T) {
+ t.Parallel()
+
+ for _, algo := range objectid.SupportedAlgorithms() {
+ id, err := objectid.ParseHex(algo, strings.Repeat("01", algo.Size()))
+ if err != nil {
+ t.Fatalf("ParseHex failed: %v", err)
+ }
+
+ b1 := id.Bytes()
+
+ b2 := id.Bytes()
+ if !bytes.Equal(b1, b2) {
+ t.Fatalf("Bytes mismatch")
+ }
+
+ b1[0] ^= 0xff
+ if bytes.Equal(b1, b2) {
+ t.Fatalf("Bytes should return independent copies")
+ }
+ }
+}
+
+func TestRawBytesAliasesStorage(t *testing.T) {
+ t.Parallel()
+
+ for _, algo := range objectid.SupportedAlgorithms() {
+ id, err := objectid.ParseHex(algo, strings.Repeat("01", algo.Size()))
+ if err != nil {
+ t.Fatalf("ParseHex failed: %v", err)
+ }
+
+ b := id.RawBytes()
+ if len(b) != id.Size() {
+ t.Fatalf("RawBytes len = %d, want %d", len(b), id.Size())
+ }
+
+ if cap(b) != len(b) {
+ t.Fatalf("RawBytes cap = %d, want %d", cap(b), len(b))
+ }
+
+ orig := id.String()
+ b[0] ^= 0xff
+
+ if id.String() == orig {
+ t.Fatalf("RawBytes should alias object ID storage")
+ }
+ }
+}
+
+func TestAlgorithmSum(t *testing.T) {
+ t.Parallel()
+
+ id1 := objectid.AlgorithmSHA1.Sum([]byte("hello"))
+ if id1.Algorithm() != objectid.AlgorithmSHA1 || id1.Size() != objectid.AlgorithmSHA1.Size() {
+ t.Fatalf("sha1 sum produced invalid object id")
+ }
+
+ id2 := objectid.AlgorithmSHA256.Sum([]byte("hello"))
+ if id2.Algorithm() != objectid.AlgorithmSHA256 || id2.Size() != objectid.AlgorithmSHA256.Size() {
+ t.Fatalf("sha256 sum produced invalid object id")
+ }
+
+ if id1.String() == id2.String() {
+ t.Fatalf("sha1 and sha256 should differ")
+ }
+}
diff --git a/object/parse.go b/object/parse.go
index 4a396517..cb75cb43 100644
--- a/object/parse.go
+++ b/object/parse.go
@@ -4,7 +4,7 @@ import (
"fmt"
objectheader "codeberg.org/lindenii/furgit/object/header"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/exact_blob.go b/object/resolve/exact_blob.go
index 3b880909..6447f06e 100644
--- a/object/resolve/exact_blob.go
+++ b/object/resolve/exact_blob.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ExactBlob reads, parses, and wraps the blob at id.
diff --git a/object/resolve/exact_blob_reader.go b/object/resolve/exact_blob_reader.go
index 5524dfcb..5a702888 100644
--- a/object/resolve/exact_blob_reader.go
+++ b/object/resolve/exact_blob_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/exact_commit.go b/object/resolve/exact_commit.go
index 0d209253..67538d79 100644
--- a/object/resolve/exact_commit.go
+++ b/object/resolve/exact_commit.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ExactCommit reads, parses, and wraps the commit at id.
diff --git a/object/resolve/exact_commit_reader.go b/object/resolve/exact_commit_reader.go
index dc8a563a..6c05b016 100644
--- a/object/resolve/exact_commit_reader.go
+++ b/object/resolve/exact_commit_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/exact_object.go b/object/resolve/exact_object.go
index 4fac07cd..48a88c5b 100644
--- a/object/resolve/exact_object.go
+++ b/object/resolve/exact_object.go
@@ -3,7 +3,7 @@ package resolve
import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ExactObject reads, parses, and wraps the object at id without constraining
diff --git a/object/resolve/exact_reader.go b/object/resolve/exact_reader.go
index 0e7a6112..cf181038 100644
--- a/object/resolve/exact_reader.go
+++ b/object/resolve/exact_reader.go
@@ -4,7 +4,7 @@ import (
"fmt"
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/exact_tag.go b/object/resolve/exact_tag.go
index 7af7cb3b..89706b48 100644
--- a/object/resolve/exact_tag.go
+++ b/object/resolve/exact_tag.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ExactTag reads, parses, and wraps the tag at id.
diff --git a/object/resolve/exact_tag_reader.go b/object/resolve/exact_tag_reader.go
index d673237f..e69441d5 100644
--- a/object/resolve/exact_tag_reader.go
+++ b/object/resolve/exact_tag_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/exact_tree.go b/object/resolve/exact_tree.go
index b4271b52..9dbd8df8 100644
--- a/object/resolve/exact_tree.go
+++ b/object/resolve/exact_tree.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ExactTree reads, parses, and wraps the tree at id.
diff --git a/object/resolve/exact_tree_reader.go b/object/resolve/exact_tree_reader.go
index b4e34dd2..8d9ec821 100644
--- a/object/resolve/exact_tree_reader.go
+++ b/object/resolve/exact_tree_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/object_parse.go b/object/resolve/object_parse.go
index bc814988..8e8d8bde 100644
--- a/object/resolve/object_parse.go
+++ b/object/resolve/object_parse.go
@@ -4,7 +4,7 @@ import (
"fmt"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/path.go b/object/resolve/path.go
index a522d823..1f865403 100644
--- a/object/resolve/path.go
+++ b/object/resolve/path.go
@@ -4,7 +4,7 @@ import (
"fmt"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PathEmptyError indicates that Path received no segments.
diff --git a/object/resolve/peel_to_blob.go b/object/resolve/peel_to_blob.go
index 59cfcba5..0e727f6f 100644
--- a/object/resolve/peel_to_blob.go
+++ b/object/resolve/peel_to_blob.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToBlob peels tags until it reaches a blob.
diff --git a/object/resolve/peel_to_blob_id.go b/object/resolve/peel_to_blob_id.go
index 3fcd9bc8..c3467cf2 100644
--- a/object/resolve/peel_to_blob_id.go
+++ b/object/resolve/peel_to_blob_id.go
@@ -3,7 +3,7 @@ package resolve
import (
"fmt"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/peel_to_blob_reader.go b/object/resolve/peel_to_blob_reader.go
index 7ea9f3af..d3bc7f49 100644
--- a/object/resolve/peel_to_blob_reader.go
+++ b/object/resolve/peel_to_blob_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToBlobReader returns a reader for the content of the peeled blob at id,
diff --git a/object/resolve/peel_to_commit.go b/object/resolve/peel_to_commit.go
index 566fa294..d548c48f 100644
--- a/object/resolve/peel_to_commit.go
+++ b/object/resolve/peel_to_commit.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToCommit peels tags until it reaches a commit.
diff --git a/object/resolve/peel_to_commit_id.go b/object/resolve/peel_to_commit_id.go
index 5d02ec1a..972823ce 100644
--- a/object/resolve/peel_to_commit_id.go
+++ b/object/resolve/peel_to_commit_id.go
@@ -3,7 +3,7 @@ package resolve
import (
"fmt"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/peel_to_commit_reader.go b/object/resolve/peel_to_commit_reader.go
index ab17fe67..6972eff3 100644
--- a/object/resolve/peel_to_commit_reader.go
+++ b/object/resolve/peel_to_commit_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToCommitReader returns a reader for the content of the peeled commit at
diff --git a/object/resolve/peel_to_tag.go b/object/resolve/peel_to_tag.go
index 49fe9108..97a5f2fc 100644
--- a/object/resolve/peel_to_tag.go
+++ b/object/resolve/peel_to_tag.go
@@ -3,7 +3,7 @@ package resolve
import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToTag returns the tag at id without further peeling.
diff --git a/object/resolve/peel_to_tag_id.go b/object/resolve/peel_to_tag_id.go
index 8574aaa2..275ef561 100644
--- a/object/resolve/peel_to_tag_id.go
+++ b/object/resolve/peel_to_tag_id.go
@@ -1,6 +1,6 @@
package resolve
-import "codeberg.org/lindenii/furgit/objectid"
+import objectid "codeberg.org/lindenii/furgit/object/id"
// PeelToTagID returns id unchanged.
func (r *Resolver) PeelToTagID(id objectid.ObjectID) (objectid.ObjectID, error) {
diff --git a/object/resolve/peel_to_tag_reader.go b/object/resolve/peel_to_tag_reader.go
index d34ff7ad..77279511 100644
--- a/object/resolve/peel_to_tag_reader.go
+++ b/object/resolve/peel_to_tag_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToTagReader returns a reader for the content of the tag at id,
diff --git a/object/resolve/peel_to_tree.go b/object/resolve/peel_to_tree.go
index bb5d2422..e8d60b76 100644
--- a/object/resolve/peel_to_tree.go
+++ b/object/resolve/peel_to_tree.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/stored"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToTree peels tags until it reaches a tree or commit. If it reaches a
diff --git a/object/resolve/peel_to_tree_id.go b/object/resolve/peel_to_tree_id.go
index 79730d4f..bacee65e 100644
--- a/object/resolve/peel_to_tree_id.go
+++ b/object/resolve/peel_to_tree_id.go
@@ -3,7 +3,7 @@ package resolve
import (
"fmt"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/resolve/peel_to_tree_reader.go b/object/resolve/peel_to_tree_reader.go
index 1f867883..515224ed 100644
--- a/object/resolve/peel_to_tree_reader.go
+++ b/object/resolve/peel_to_tree_reader.go
@@ -3,7 +3,7 @@ package resolve
import (
"io"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// PeelToTreeReader returns a reader for the content of the peeled tree at id,
diff --git a/object/resolve/treefs.go b/object/resolve/treefs.go
index eda8c7fa..de5d588a 100644
--- a/object/resolve/treefs.go
+++ b/object/resolve/treefs.go
@@ -4,7 +4,7 @@ import (
"io/fs"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// TreeFS exposes one Git tree as an fs.FS.
diff --git a/object/resolve/treefs_entry.go b/object/resolve/treefs_entry.go
index af9760ca..b37ac0a0 100644
--- a/object/resolve/treefs_entry.go
+++ b/object/resolve/treefs_entry.go
@@ -6,7 +6,7 @@ import (
"io/fs"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func (treeFS *TreeFS) resolvePath(op treeFSOp, name string) (treeEntryValue, error) {
diff --git a/object/resolve/treefs_new.go b/object/resolve/treefs_new.go
index 9a48a02e..9f5fe77d 100644
--- a/object/resolve/treefs_new.go
+++ b/object/resolve/treefs_new.go
@@ -1,6 +1,6 @@
package resolve
-import "codeberg.org/lindenii/furgit/objectid"
+import objectid "codeberg.org/lindenii/furgit/object/id"
// TreeFS returns a new filesystem view rooted at root, which may be any
// tree-ish object accepted by PeelToTreeID.
diff --git a/object/resolve/treefs_test.go b/object/resolve/treefs_test.go
index 64cd1778..c337a7cd 100644
--- a/object/resolve/treefs_test.go
+++ b/object/resolve/treefs_test.go
@@ -8,7 +8,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
"codeberg.org/lindenii/furgit/object/resolve"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/repository"
)
diff --git a/object/stored/stored.go b/object/stored/stored.go
index 3e0352d1..f48aaa77 100644
--- a/object/stored/stored.go
+++ b/object/stored/stored.go
@@ -7,7 +7,7 @@ package stored
import (
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// Stored represents a stored object,
diff --git a/object/tag.go b/object/tag.go
index 6b2c7eb1..50c4b273 100644
--- a/object/tag.go
+++ b/object/tag.go
@@ -1,7 +1,7 @@
package object
import (
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/tag_parse.go b/object/tag_parse.go
index 3def4101..afc9a2e9 100644
--- a/object/tag_parse.go
+++ b/object/tag_parse.go
@@ -5,7 +5,7 @@ import (
"errors"
"fmt"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/tag_parse_test.go b/object/tag_parse_test.go
index d360f3ef..07998f1c 100644
--- a/object/tag_parse_test.go
+++ b/object/tag_parse_test.go
@@ -6,7 +6,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/tag_serialize_test.go b/object/tag_serialize_test.go
index e1bdbab2..de9f813d 100644
--- a/object/tag_serialize_test.go
+++ b/object/tag_serialize_test.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestTagSerialize(t *testing.T) {
diff --git a/object/tree.go b/object/tree.go
index 2abd2914..83dcb508 100644
--- a/object/tree.go
+++ b/object/tree.go
@@ -5,7 +5,7 @@ import (
"fmt"
"sort"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
diff --git a/object/tree_parse.go b/object/tree_parse.go
index dd4faa8b..944dc538 100644
--- a/object/tree_parse.go
+++ b/object/tree_parse.go
@@ -5,7 +5,7 @@ import (
"fmt"
"strconv"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
// ParseTree decodes a tree object body.
diff --git a/object/tree_parse_test.go b/object/tree_parse_test.go
index 03a36a72..2e78243c 100644
--- a/object/tree_parse_test.go
+++ b/object/tree_parse_test.go
@@ -6,7 +6,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestTreeParseFromGit(t *testing.T) {
diff --git a/object/tree_serialize_test.go b/object/tree_serialize_test.go
index c038ad58..26f8768e 100644
--- a/object/tree_serialize_test.go
+++ b/object/tree_serialize_test.go
@@ -5,7 +5,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
"codeberg.org/lindenii/furgit/object"
- "codeberg.org/lindenii/furgit/objectid"
+ objectid "codeberg.org/lindenii/furgit/object/id"
)
func TestTreeSerialize(t *testing.T) {