aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--object/blob_serialize.go4
-rw-r--r--object/commit_parse.go4
-rw-r--r--object/commit_serialize.go7
-rw-r--r--object/object.go13
-rw-r--r--object/tag_parse.go2
-rw-r--r--object/tag_serialize.go5
-rw-r--r--object/tree.go9
-rw-r--r--object/tree_parse.go2
-rw-r--r--object/tree_serialize.go3
-rw-r--r--object/tree_serialize_test.go5
10 files changed, 24 insertions, 30 deletions
diff --git a/object/blob_serialize.go b/object/blob_serialize.go
index d14ae56c..0d4c1e54 100644
--- a/object/blob_serialize.go
+++ b/object/blob_serialize.go
@@ -1,6 +1,8 @@
package object
import (
+ "errors"
+
"codeberg.org/lindenii/furgit/internal/objectheader"
"codeberg.org/lindenii/furgit/objecttype"
)
@@ -18,7 +20,7 @@ func (blob *Blob) SerializeWithHeader() ([]byte, error) {
}
header, ok := objectheader.Encode(objecttype.TypeBlob, int64(len(body)))
if !ok {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: blob: failed to encode object header")
}
raw := make([]byte, len(header)+len(body))
copy(raw, header)
diff --git a/object/commit_parse.go b/object/commit_parse.go
index acc90951..31def350 100644
--- a/object/commit_parse.go
+++ b/object/commit_parse.go
@@ -11,7 +11,7 @@ import (
// ParseCommit decodes a commit object body.
func ParseCommit(body []byte, algo oid.Algorithm) (*Commit, error) {
if algo.Size() == 0 {
- return nil, ErrInvalidObject
+ return nil, fmt.Errorf("object: commit: invalid hash algorithm %q", algo)
}
c := new(Commit)
@@ -79,7 +79,7 @@ func ParseCommit(body []byte, algo oid.Algorithm) (*Commit, error) {
}
if i > len(body) {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: commit: parser position out of bounds")
}
c.Message = append([]byte(nil), body[i:]...)
return c, nil
diff --git a/object/commit_serialize.go b/object/commit_serialize.go
index b7c058a3..c34c44a3 100644
--- a/object/commit_serialize.go
+++ b/object/commit_serialize.go
@@ -2,6 +2,7 @@ package object
import (
"bytes"
+ "errors"
"fmt"
"codeberg.org/lindenii/furgit/internal/objectheader"
@@ -13,7 +14,7 @@ func (commit *Commit) SerializeWithoutHeader() ([]byte, error) {
var buf bytes.Buffer
if commit.Tree.Size() == 0 {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: commit: missing tree id")
}
fmt.Fprintf(&buf, "tree %s\n", commit.Tree.String())
for _, parent := range commit.Parents {
@@ -43,7 +44,7 @@ func (commit *Commit) SerializeWithoutHeader() ([]byte, error) {
}
for _, h := range commit.ExtraHeaders {
if h.Key == "" {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: commit: extra header has empty key")
}
buf.WriteString(h.Key)
buf.WriteByte(' ')
@@ -64,7 +65,7 @@ func (commit *Commit) SerializeWithHeader() ([]byte, error) {
}
header, ok := objectheader.Encode(objecttype.TypeCommit, int64(len(body)))
if !ok {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: commit: failed to encode object header")
}
raw := make([]byte, len(header)+len(body))
copy(raw, header)
diff --git a/object/object.go b/object/object.go
index 53fb0a58..b91fd324 100644
--- a/object/object.go
+++ b/object/object.go
@@ -1,18 +1,7 @@
// Package object provides Git object models and codecs.
package object
-import (
- "errors"
-
- "codeberg.org/lindenii/furgit/objecttype"
-)
-
-var (
- // ErrInvalidObject indicates malformed serialized data.
- ErrInvalidObject = errors.New("object: invalid object encoding")
- // ErrNotFound indicates missing entries in in-memory lookups.
- ErrNotFound = errors.New("object: not found")
-)
+import "codeberg.org/lindenii/furgit/objecttype"
// Object is a Git object that can serialize itself.
type Object interface {
diff --git a/object/tag_parse.go b/object/tag_parse.go
index b9b3cac8..84256166 100644
--- a/object/tag_parse.go
+++ b/object/tag_parse.go
@@ -12,7 +12,7 @@ import (
// ParseTag decodes a tag object body.
func ParseTag(body []byte, algo oid.Algorithm) (*Tag, error) {
if algo.Size() == 0 {
- return nil, ErrInvalidObject
+ return nil, fmt.Errorf("object: tag: invalid hash algorithm %q", algo)
}
t := new(Tag)
diff --git a/object/tag_serialize.go b/object/tag_serialize.go
index f9d754cf..0fa632df 100644
--- a/object/tag_serialize.go
+++ b/object/tag_serialize.go
@@ -2,6 +2,7 @@ package object
import (
"bytes"
+ "errors"
"fmt"
"codeberg.org/lindenii/furgit/internal/objectheader"
@@ -11,7 +12,7 @@ import (
// SerializeWithoutHeader renders the raw tag body bytes.
func (tag *Tag) SerializeWithoutHeader() ([]byte, error) {
if tag.Target.Size() == 0 {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: tag: missing target id")
}
var buf bytes.Buffer
@@ -52,7 +53,7 @@ func (tag *Tag) SerializeWithHeader() ([]byte, error) {
}
header, ok := objectheader.Encode(objecttype.TypeTag, int64(len(body)))
if !ok {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: tag: failed to encode object header")
}
raw := make([]byte, len(header)+len(body))
copy(raw, header)
diff --git a/object/tree.go b/object/tree.go
index 9ccea4a2..b655be03 100644
--- a/object/tree.go
+++ b/object/tree.go
@@ -2,6 +2,7 @@ package object
import (
"bytes"
+ "errors"
"fmt"
"sort"
@@ -73,7 +74,7 @@ func (tree *Tree) entry(name []byte, searchIsTree bool) *TreeEntry {
// InsertEntry inserts a tree entry while preserving Git ordering.
func (tree *Tree) InsertEntry(newEntry TreeEntry) error {
if tree == nil {
- return ErrInvalidObject
+ return errors.New("object: tree: insert on nil tree")
}
if tree.entry(newEntry.Name, true) != nil || tree.entry(newEntry.Name, false) != nil {
return fmt.Errorf("object: tree: entry %q already exists", newEntry.Name)
@@ -91,10 +92,10 @@ func (tree *Tree) InsertEntry(newEntry TreeEntry) error {
// RemoveEntry removes a tree entry by name.
func (tree *Tree) RemoveEntry(name []byte) error {
if tree == nil {
- return ErrInvalidObject
+ return errors.New("object: tree: remove on nil tree")
}
if len(tree.Entries) == 0 {
- return ErrNotFound
+ return fmt.Errorf("object: tree: entry %q not found", name)
}
for i := range tree.Entries {
if bytes.Equal(tree.Entries[i].Name, name) {
@@ -103,7 +104,7 @@ func (tree *Tree) RemoveEntry(name []byte) error {
return nil
}
}
- return ErrNotFound
+ return fmt.Errorf("object: tree: entry %q not found", name)
}
// TreeEntryNameCompare compares names using Git tree ordering rules.
diff --git a/object/tree_parse.go b/object/tree_parse.go
index e1e560b6..ee475803 100644
--- a/object/tree_parse.go
+++ b/object/tree_parse.go
@@ -11,7 +11,7 @@ import (
// ParseTree decodes a tree object body.
func ParseTree(body []byte, algo oid.Algorithm) (*Tree, error) {
if algo.Size() == 0 {
- return nil, ErrInvalidObject
+ return nil, fmt.Errorf("object: tree: invalid hash algorithm %q", algo)
}
var entries []TreeEntry
diff --git a/object/tree_serialize.go b/object/tree_serialize.go
index 2ef0ebbb..254b13e3 100644
--- a/object/tree_serialize.go
+++ b/object/tree_serialize.go
@@ -1,6 +1,7 @@
package object
import (
+ "errors"
"strconv"
"codeberg.org/lindenii/furgit/internal/objectheader"
@@ -40,7 +41,7 @@ func (tree *Tree) SerializeWithHeader() ([]byte, error) {
}
header, ok := objectheader.Encode(objecttype.TypeTree, int64(len(body)))
if !ok {
- return nil, ErrInvalidObject
+ return nil, errors.New("object: tree: failed to encode object header")
}
raw := make([]byte, len(header)+len(body))
copy(raw, header)
diff --git a/object/tree_serialize_test.go b/object/tree_serialize_test.go
index c04c1d92..59d09ea1 100644
--- a/object/tree_serialize_test.go
+++ b/object/tree_serialize_test.go
@@ -1,7 +1,6 @@
package object_test
import (
- "errors"
"testing"
"codeberg.org/lindenii/furgit/internal/testgit"
@@ -36,8 +35,8 @@ func TestTreeSerialize(t *testing.T) {
if tree.Entry(removed.Name) != nil {
t.Fatalf("Entry(%q) should be nil after remove", removed.Name)
}
- if err := tree.RemoveEntry([]byte("no-such-entry")); !errors.Is(err, object.ErrNotFound) {
- t.Fatalf("RemoveEntry missing err = %v, want ErrNotFound", err)
+ if err := tree.RemoveEntry([]byte("no-such-entry")); err == nil {
+ t.Fatalf("RemoveEntry missing entry should fail")
}
if err := tree.InsertEntry(removed); err != nil {
t.Fatalf("re-InsertEntry(%q): %v", removed.Name, err)