aboutsummaryrefslogtreecommitdiff
path: root/object/fetch
diff options
context:
space:
mode:
Diffstat (limited to 'object/fetch')
-rw-r--r--object/fetch/exact_blob.go6
-rw-r--r--object/fetch/exact_blob_reader.go2
-rw-r--r--object/fetch/exact_commit.go6
-rw-r--r--object/fetch/exact_commit_reader.go2
-rw-r--r--object/fetch/exact_reader.go8
-rw-r--r--object/fetch/exact_tag.go6
-rw-r--r--object/fetch/exact_tag_reader.go2
-rw-r--r--object/fetch/exact_tree.go6
-rw-r--r--object/fetch/exact_tree_reader.go2
-rw-r--r--object/fetch/object_errors.go19
-rw-r--r--object/fetch/object_parse.go2
-rw-r--r--object/fetch/peel_to_blob.go6
-rw-r--r--object/fetch/peel_to_blob_id.go9
-rw-r--r--object/fetch/peel_to_commit.go6
-rw-r--r--object/fetch/peel_to_commit_id.go9
-rw-r--r--object/fetch/peel_to_tree.go6
-rw-r--r--object/fetch/peel_to_tree_id.go9
17 files changed, 61 insertions, 45 deletions
diff --git a/object/fetch/exact_blob.go b/object/fetch/exact_blob.go
index 8b0378ea..ef4b84fe 100644
--- a/object/fetch/exact_blob.go
+++ b/object/fetch/exact_blob.go
@@ -1,11 +1,11 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
"codeberg.org/lindenii/furgit/object/blob"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// ExactBlob reads, parses, and wraps the blob at id.
@@ -19,7 +19,7 @@ func (r *Fetcher) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], e
blob, ok := parsed.(*blob.Blob)
if !ok {
- return nil, fmt.Errorf("object/fetch: expected blob object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeBlob}
}
return stored.New(id, blob), nil
diff --git a/object/fetch/exact_blob_reader.go b/object/fetch/exact_blob_reader.go
index ee0fc21a..4a313d3e 100644
--- a/object/fetch/exact_blob_reader.go
+++ b/object/fetch/exact_blob_reader.go
@@ -12,5 +12,5 @@ import (
//
// Labels: Life-Parent, Close-Caller.
func (r *Fetcher) ExactBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
- return r.exactReader(id, objecttype.TypeBlob, "blob")
+ return r.exactReader(id, objecttype.TypeBlob)
}
diff --git a/object/fetch/exact_commit.go b/object/fetch/exact_commit.go
index 1b330e7d..9483b2b1 100644
--- a/object/fetch/exact_commit.go
+++ b/object/fetch/exact_commit.go
@@ -1,11 +1,11 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
"codeberg.org/lindenii/furgit/object/commit"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// ExactCommit reads, parses, and wraps the commit at id.
@@ -19,7 +19,7 @@ func (r *Fetcher) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Comm
commit, ok := parsed.(*commit.Commit)
if !ok {
- return nil, fmt.Errorf("object/fetch: expected commit object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeCommit}
}
return stored.New(id, commit), nil
diff --git a/object/fetch/exact_commit_reader.go b/object/fetch/exact_commit_reader.go
index 484fd89f..14533a4d 100644
--- a/object/fetch/exact_commit_reader.go
+++ b/object/fetch/exact_commit_reader.go
@@ -14,5 +14,5 @@ import (
//
// Labels: Life-Parent, Close-Caller.
func (r *Fetcher) ExactCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
- return r.exactReader(id, objecttype.TypeCommit, "commit")
+ return r.exactReader(id, objecttype.TypeCommit)
}
diff --git a/object/fetch/exact_reader.go b/object/fetch/exact_reader.go
index 54cf246c..d588480d 100644
--- a/object/fetch/exact_reader.go
+++ b/object/fetch/exact_reader.go
@@ -1,25 +1,25 @@
package fetch
import (
- "fmt"
"io"
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
// exactReader reads one object's content stream and verifies that its header
// type matches wantType.
-func (r *Fetcher) exactReader(id objectid.ObjectID, wantType objecttype.Type, wantName string) (io.ReadCloser, int64, error) {
+func (r *Fetcher) exactReader(id objectid.ObjectID, wantType objecttype.Type) (io.ReadCloser, int64, error) {
gotType, size, rc, err := r.store.ReadReaderContent(id)
if err != nil {
- return nil, 0, err
+ return nil, 0, wrapObjectReadError(id, err)
}
if gotType != wantType {
_ = rc.Close()
- return nil, 0, fmt.Errorf("object/fetch: expected %s object %s, got %v", wantName, id, gotType)
+ return nil, 0, &giterrors.ObjectTypeError{OID: id, Got: gotType, Want: wantType}
}
return rc, size, nil
diff --git a/object/fetch/exact_tag.go b/object/fetch/exact_tag.go
index e50cc565..230e7d57 100644
--- a/object/fetch/exact_tag.go
+++ b/object/fetch/exact_tag.go
@@ -1,11 +1,11 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
"codeberg.org/lindenii/furgit/object/tag"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// ExactTag reads, parses, and wraps the tag at id.
@@ -19,7 +19,7 @@ func (r *Fetcher) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], erro
tag, ok := parsed.(*tag.Tag)
if !ok {
- return nil, fmt.Errorf("object/fetch: expected tag object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeTag}
}
return stored.New(id, tag), nil
diff --git a/object/fetch/exact_tag_reader.go b/object/fetch/exact_tag_reader.go
index d5e4f2c4..bba83a64 100644
--- a/object/fetch/exact_tag_reader.go
+++ b/object/fetch/exact_tag_reader.go
@@ -14,5 +14,5 @@ import (
//
// Labels: Life-Parent, Close-Caller.
func (r *Fetcher) ExactTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
- return r.exactReader(id, objecttype.TypeTag, "tag")
+ return r.exactReader(id, objecttype.TypeTag)
}
diff --git a/object/fetch/exact_tree.go b/object/fetch/exact_tree.go
index 71d4c2b9..8bfc87ea 100644
--- a/object/fetch/exact_tree.go
+++ b/object/fetch/exact_tree.go
@@ -1,11 +1,11 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
"codeberg.org/lindenii/furgit/object/tree"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// ExactTree reads, parses, and wraps the tree at id.
@@ -19,7 +19,7 @@ func (r *Fetcher) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], e
tree, ok := parsed.(*tree.Tree)
if !ok {
- return nil, fmt.Errorf("object/fetch: expected tree object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeTree}
}
return stored.New(id, tree), nil
diff --git a/object/fetch/exact_tree_reader.go b/object/fetch/exact_tree_reader.go
index d8fca5dc..3504b9b1 100644
--- a/object/fetch/exact_tree_reader.go
+++ b/object/fetch/exact_tree_reader.go
@@ -14,5 +14,5 @@ import (
//
// Labels: Life-Parent, Close-Caller.
func (r *Fetcher) ExactTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
- return r.exactReader(id, objecttype.TypeTree, "tree")
+ return r.exactReader(id, objecttype.TypeTree)
}
diff --git a/object/fetch/object_errors.go b/object/fetch/object_errors.go
new file mode 100644
index 00000000..08de6f75
--- /dev/null
+++ b/object/fetch/object_errors.go
@@ -0,0 +1,19 @@
+package fetch
+
+import (
+ stderrors "errors"
+
+ giterrors "codeberg.org/lindenii/furgit/errors"
+ objectid "codeberg.org/lindenii/furgit/object/id"
+ objectstore "codeberg.org/lindenii/furgit/object/store"
+)
+
+// wrapObjectReadError maps raw object-store lookup failures to fetcher-level
+// object lookup errors.
+func wrapObjectReadError(id objectid.ObjectID, err error) error {
+ if stderrors.Is(err, objectstore.ErrObjectNotFound) {
+ return &giterrors.ObjectMissingError{OID: id}
+ }
+
+ return err
+}
diff --git a/object/fetch/object_parse.go b/object/fetch/object_parse.go
index 35389ddf..0a61bb3d 100644
--- a/object/fetch/object_parse.go
+++ b/object/fetch/object_parse.go
@@ -10,7 +10,7 @@ import (
func (r *Fetcher) parseObject(id objectid.ObjectID) (object.Object, error) {
ty, content, err := r.store.ReadBytesContent(id)
if err != nil {
- return nil, err
+ return nil, wrapObjectReadError(id, err)
}
parsed, err := object.ParseWithoutHeader(ty, content, id.Algorithm())
diff --git a/object/fetch/peel_to_blob.go b/object/fetch/peel_to_blob.go
index eea1487c..adf86495 100644
--- a/object/fetch/peel_to_blob.go
+++ b/object/fetch/peel_to_blob.go
@@ -1,12 +1,12 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
"codeberg.org/lindenii/furgit/object/blob"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
"codeberg.org/lindenii/furgit/object/tag"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// PeelToBlob peels tags until it reaches a blob.
@@ -25,7 +25,7 @@ func (r *Fetcher) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob],
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeBlob}
}
}
}
diff --git a/object/fetch/peel_to_blob_id.go b/object/fetch/peel_to_blob_id.go
index 9d13f640..5b5da026 100644
--- a/object/fetch/peel_to_blob_id.go
+++ b/object/fetch/peel_to_blob_id.go
@@ -1,8 +1,7 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -12,7 +11,7 @@ func (r *Fetcher) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error)
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
- return objectid.ObjectID{}, err
+ return objectid.ObjectID{}, wrapObjectReadError(id, err)
}
switch ty {
@@ -31,9 +30,9 @@ func (r *Fetcher) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error)
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeBlob}
default:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeBlob}
}
}
}
diff --git a/object/fetch/peel_to_commit.go b/object/fetch/peel_to_commit.go
index 4a88f6f4..e5fdce2b 100644
--- a/object/fetch/peel_to_commit.go
+++ b/object/fetch/peel_to_commit.go
@@ -1,12 +1,12 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
"codeberg.org/lindenii/furgit/object/commit"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
"codeberg.org/lindenii/furgit/object/tag"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// PeelToCommit peels tags until it reaches a commit.
@@ -25,7 +25,7 @@ func (r *Fetcher) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Com
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeCommit}
}
}
}
diff --git a/object/fetch/peel_to_commit_id.go b/object/fetch/peel_to_commit_id.go
index b6b257cf..e5a0766f 100644
--- a/object/fetch/peel_to_commit_id.go
+++ b/object/fetch/peel_to_commit_id.go
@@ -1,8 +1,7 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -12,7 +11,7 @@ func (r *Fetcher) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
- return objectid.ObjectID{}, err
+ return objectid.ObjectID{}, wrapObjectReadError(id, err)
}
switch ty {
@@ -31,9 +30,9 @@ func (r *Fetcher) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeCommit}
default:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeCommit}
}
}
}
diff --git a/object/fetch/peel_to_tree.go b/object/fetch/peel_to_tree.go
index 5446eac0..adc87e6b 100644
--- a/object/fetch/peel_to_tree.go
+++ b/object/fetch/peel_to_tree.go
@@ -1,13 +1,13 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
"codeberg.org/lindenii/furgit/object/commit"
objectid "codeberg.org/lindenii/furgit/object/id"
"codeberg.org/lindenii/furgit/object/stored"
"codeberg.org/lindenii/furgit/object/tag"
"codeberg.org/lindenii/furgit/object/tree"
+ objecttype "codeberg.org/lindenii/furgit/object/type"
)
// PeelToTree peels tags until it reaches a tree or commit. If it reaches a
@@ -29,7 +29,7 @@ func (r *Fetcher) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree],
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, &giterrors.ObjectTypeError{OID: id, Got: parsed.ObjectType(), Want: objecttype.TypeTree}
}
}
}
diff --git a/object/fetch/peel_to_tree_id.go b/object/fetch/peel_to_tree_id.go
index 21dcfde4..5f951c04 100644
--- a/object/fetch/peel_to_tree_id.go
+++ b/object/fetch/peel_to_tree_id.go
@@ -1,8 +1,7 @@
package fetch
import (
- "fmt"
-
+ giterrors "codeberg.org/lindenii/furgit/errors"
objectid "codeberg.org/lindenii/furgit/object/id"
objecttype "codeberg.org/lindenii/furgit/object/type"
)
@@ -13,7 +12,7 @@ func (r *Fetcher) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error)
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
- return objectid.ObjectID{}, err
+ return objectid.ObjectID{}, wrapObjectReadError(id, err)
}
switch ty {
@@ -38,9 +37,9 @@ func (r *Fetcher) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error)
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeTree}
default:
- return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, &giterrors.ObjectTypeError{OID: id, Got: ty, Want: objecttype.TypeTree}
}
}
}