diff options
| author | 2026-03-25 14:21:50 +0000 | |
|---|---|---|
| committer | 2026-03-25 14:22:01 +0000 | |
| commit | e4373a7e553f8523db3e99ea316e1c25d30cc059 (patch) | |
| tree | c21d0b20b1c4743619a05fdfcfa676ab2642da9e /object | |
| parent | *: objecttype, objectheader -> object/type, object/header (diff) | |
| signature | No signature | |
*: objectid -> object/id
Diffstat (limited to 'object')
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) { |
