aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-25 19:33:32 +0000
committerGravatar Runxi Yu2026-03-25 19:33:57 +0000
commit1aa5cad4c8d6455eeb1f10893549e18bcca11996 (patch)
tree31082a30bde08639fc764c52c3cf2283489f3302
parentTODO: updates (diff)
signatureNo signature
object/fetch: Rename from object/resolve
-rw-r--r--README.md6
-rw-r--r--object/fetch/doc.go (renamed from object/resolve/doc.go)4
-rw-r--r--object/fetch/exact_blob.go (renamed from object/resolve/exact_blob.go)6
-rw-r--r--object/fetch/exact_blob_reader.go (renamed from object/resolve/exact_blob_reader.go)4
-rw-r--r--object/fetch/exact_commit.go (renamed from object/resolve/exact_commit.go)6
-rw-r--r--object/fetch/exact_commit_reader.go (renamed from object/resolve/exact_commit_reader.go)4
-rw-r--r--object/fetch/exact_object.go (renamed from object/resolve/exact_object.go)4
-rw-r--r--object/fetch/exact_reader.go (renamed from object/resolve/exact_reader.go)6
-rw-r--r--object/fetch/exact_tag.go (renamed from object/resolve/exact_tag.go)6
-rw-r--r--object/fetch/exact_tag_reader.go (renamed from object/resolve/exact_tag_reader.go)4
-rw-r--r--object/fetch/exact_tree.go (renamed from object/resolve/exact_tree.go)6
-rw-r--r--object/fetch/exact_tree_reader.go (renamed from object/resolve/exact_tree_reader.go)4
-rw-r--r--object/fetch/fetcher.go17
-rw-r--r--object/fetch/object_parse.go (renamed from object/resolve/object_parse.go)6
-rw-r--r--object/fetch/path.go (renamed from object/resolve/path.go)12
-rw-r--r--object/fetch/peel_to_blob.go (renamed from object/resolve/peel_to_blob.go)6
-rw-r--r--object/fetch/peel_to_blob_id.go (renamed from object/resolve/peel_to_blob_id.go)8
-rw-r--r--object/fetch/peel_to_blob_reader.go (renamed from object/resolve/peel_to_blob_reader.go)4
-rw-r--r--object/fetch/peel_to_commit.go (renamed from object/resolve/peel_to_commit.go)6
-rw-r--r--object/fetch/peel_to_commit_id.go (renamed from object/resolve/peel_to_commit_id.go)8
-rw-r--r--object/fetch/peel_to_commit_reader.go (renamed from object/resolve/peel_to_commit_reader.go)4
-rw-r--r--object/fetch/peel_to_tag.go (renamed from object/resolve/peel_to_tag.go)4
-rw-r--r--object/fetch/peel_to_tag_id.go (renamed from object/resolve/peel_to_tag_id.go)4
-rw-r--r--object/fetch/peel_to_tag_reader.go (renamed from object/resolve/peel_to_tag_reader.go)4
-rw-r--r--object/fetch/peel_to_tree.go (renamed from object/resolve/peel_to_tree.go)6
-rw-r--r--object/fetch/peel_to_tree_id.go (renamed from object/resolve/peel_to_tree_id.go)8
-rw-r--r--object/fetch/peel_to_tree_reader.go (renamed from object/resolve/peel_to_tree_reader.go)4
-rw-r--r--object/fetch/treefs.go (renamed from object/resolve/treefs.go)6
-rw-r--r--object/fetch/treefs_entry.go (renamed from object/resolve/treefs_entry.go)6
-rw-r--r--object/fetch/treefs_info.go (renamed from object/resolve/treefs_info.go)2
-rw-r--r--object/fetch/treefs_new.go (renamed from object/resolve/treefs_new.go)4
-rw-r--r--object/fetch/treefs_op.go (renamed from object/resolve/treefs_op.go)2
-rw-r--r--object/fetch/treefs_open.go (renamed from object/resolve/treefs_open.go)4
-rw-r--r--object/fetch/treefs_path.go (renamed from object/resolve/treefs_path.go)2
-rw-r--r--object/fetch/treefs_readdir.go (renamed from object/resolve/treefs_readdir.go)2
-rw-r--r--object/fetch/treefs_readfile.go (renamed from object/resolve/treefs_readfile.go)4
-rw-r--r--object/fetch/treefs_stat.go (renamed from object/resolve/treefs_stat.go)2
-rw-r--r--object/fetch/treefs_sub.go (renamed from object/resolve/treefs_sub.go)2
-rw-r--r--object/fetch/treefs_test.go (renamed from object/resolve/treefs_test.go)6
-rw-r--r--object/resolve/resolver.go17
-rw-r--r--repository/resolver.go6
41 files changed, 113 insertions, 113 deletions
diff --git a/README.md b/README.md
index 151bcf01..50b26d6d 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,7 @@ bare repository or a `.git` directory. Then,
* A common pattern is to resolve a ref first, then pass the resulting object
ID to the resolver.
-* `repo.Resolver()` is the main object-facing API for most callers.
+* `repo.Fetcher()` is the main object-facing API for most callers.
* Use it when you want commits, trees, blobs, or tags as typed values.
* It also handles peeling through annotated tags, resolving objects to the
type you actually want, and walking paths inside trees.
@@ -39,7 +39,7 @@ bare repository or a `.git` directory. Then,
* If your goal is "show me this commit", "read this tree", "follow this tag",
or "get me the file at this path", this is usually the right layer.
-* `repo.Objects()` is the storage layer underneath `Resolver`.
+* `repo.Objects()` is the storage layer underneath `Fetcher`.
* Use it when you need to read object headers, read raw object contents,
stream object data, or otherwise look up objects directly by ID.
* Most callers who want to work with Git objects as commits, trees, blobs, or
@@ -60,7 +60,7 @@ Note that:
As a rule of thumb:
* If you have a ref name, start with `repo.Refs()`.
-* If you want typed objects or path-based access, use `repo.Resolver()`.
+* If you want typed objects or path-based access, use `repo.Fetcher()`.
* If you need raw object lookup by ID, object headers, or object streams, use
`repo.Objects()`.
diff --git a/object/resolve/doc.go b/object/fetch/doc.go
index c4197087..e5ca33a9 100644
--- a/object/resolve/doc.go
+++ b/object/fetch/doc.go
@@ -1,5 +1,5 @@
// Package resolve resolves stored Git objects by exact type, by peeling
// tree-ish or commit-ish references, and by path within trees.
//
-// A Resolver does not take ownership of the underlying object store.
-package resolve
+// A Fetcher does not take ownership of the underlying object store.
+package fetch
diff --git a/object/resolve/exact_blob.go b/object/fetch/exact_blob.go
index 2cd8b298..96ededdc 100644
--- a/object/resolve/exact_blob.go
+++ b/object/fetch/exact_blob.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -9,7 +9,7 @@ import (
)
// ExactBlob reads, parses, and wraps the blob at id.
-func (r *Resolver) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) {
+func (r *Fetcher) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) {
parsed, err := r.parseObject(id)
if err != nil {
return nil, err
@@ -17,7 +17,7 @@ func (r *Resolver) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob],
blob, ok := parsed.(*blob.Blob)
if !ok {
- return nil, fmt.Errorf("object/resolve: expected blob object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected blob object %s, got %v", id, parsed.ObjectType())
}
return stored.New(id, blob), nil
diff --git a/object/resolve/exact_blob_reader.go b/object/fetch/exact_blob_reader.go
index 5a702888..95f5e1aa 100644
--- a/object/resolve/exact_blob_reader.go
+++ b/object/fetch/exact_blob_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -9,6 +9,6 @@ import (
// ExactBlobReader returns a reader for the content of the blob at id,
// together with its content size in bytes.
-func (r *Resolver) ExactBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) ExactBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
return r.exactReader(id, objecttype.TypeBlob, "blob")
}
diff --git a/object/resolve/exact_commit.go b/object/fetch/exact_commit.go
index e6b379aa..d3f9dee1 100644
--- a/object/resolve/exact_commit.go
+++ b/object/fetch/exact_commit.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -9,7 +9,7 @@ import (
)
// ExactCommit reads, parses, and wraps the commit at id.
-func (r *Resolver) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) {
+func (r *Fetcher) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) {
parsed, err := r.parseObject(id)
if err != nil {
return nil, err
@@ -17,7 +17,7 @@ func (r *Resolver) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Com
commit, ok := parsed.(*commit.Commit)
if !ok {
- return nil, fmt.Errorf("object/resolve: expected commit object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected commit object %s, got %v", id, parsed.ObjectType())
}
return stored.New(id, commit), nil
diff --git a/object/resolve/exact_commit_reader.go b/object/fetch/exact_commit_reader.go
index 6c05b016..5ccae4b1 100644
--- a/object/resolve/exact_commit_reader.go
+++ b/object/fetch/exact_commit_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -11,6 +11,6 @@ import (
// together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) ExactCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) ExactCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
return r.exactReader(id, objecttype.TypeCommit, "commit")
}
diff --git a/object/resolve/exact_object.go b/object/fetch/exact_object.go
index db6165f4..869d811f 100644
--- a/object/resolve/exact_object.go
+++ b/object/fetch/exact_object.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"codeberg.org/lindenii/furgit/object"
@@ -8,7 +8,7 @@ import (
// ExactObject reads, parses, and wraps the object at id without constraining
// its concrete object kind.
-func (r *Resolver) ExactObject(id objectid.ObjectID) (*stored.Stored[object.Object], error) {
+func (r *Fetcher) ExactObject(id objectid.ObjectID) (*stored.Stored[object.Object], error) {
parsed, err := r.parseObject(id)
if err != nil {
return nil, err
diff --git a/object/resolve/exact_reader.go b/object/fetch/exact_reader.go
index cf181038..54cf246c 100644
--- a/object/resolve/exact_reader.go
+++ b/object/fetch/exact_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -10,7 +10,7 @@ import (
// exactReader reads one object's content stream and verifies that its header
// type matches wantType.
-func (r *Resolver) exactReader(id objectid.ObjectID, wantType objecttype.Type, wantName string) (io.ReadCloser, int64, error) {
+func (r *Fetcher) exactReader(id objectid.ObjectID, wantType objecttype.Type, wantName string) (io.ReadCloser, int64, error) {
gotType, size, rc, err := r.store.ReadReaderContent(id)
if err != nil {
return nil, 0, err
@@ -19,7 +19,7 @@ func (r *Resolver) exactReader(id objectid.ObjectID, wantType objecttype.Type, w
if gotType != wantType {
_ = rc.Close()
- return nil, 0, fmt.Errorf("object/resolve: expected %s object %s, got %v", wantName, id, gotType)
+ return nil, 0, fmt.Errorf("object/fetch: expected %s object %s, got %v", wantName, id, gotType)
}
return rc, size, nil
diff --git a/object/resolve/exact_tag.go b/object/fetch/exact_tag.go
index 8c5d22c9..03c66019 100644
--- a/object/resolve/exact_tag.go
+++ b/object/fetch/exact_tag.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -9,7 +9,7 @@ import (
)
// ExactTag reads, parses, and wraps the tag at id.
-func (r *Resolver) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) {
+func (r *Fetcher) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) {
parsed, err := r.parseObject(id)
if err != nil {
return nil, err
@@ -17,7 +17,7 @@ func (r *Resolver) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], err
tag, ok := parsed.(*tag.Tag)
if !ok {
- return nil, fmt.Errorf("object/resolve: expected tag object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected tag object %s, got %v", id, parsed.ObjectType())
}
return stored.New(id, tag), nil
diff --git a/object/resolve/exact_tag_reader.go b/object/fetch/exact_tag_reader.go
index e69441d5..79a31a4c 100644
--- a/object/resolve/exact_tag_reader.go
+++ b/object/fetch/exact_tag_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -11,6 +11,6 @@ import (
// together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) ExactTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) ExactTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
return r.exactReader(id, objecttype.TypeTag, "tag")
}
diff --git a/object/resolve/exact_tree.go b/object/fetch/exact_tree.go
index de58ddb1..cab10ba2 100644
--- a/object/resolve/exact_tree.go
+++ b/object/fetch/exact_tree.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -9,7 +9,7 @@ import (
)
// ExactTree reads, parses, and wraps the tree at id.
-func (r *Resolver) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) {
+func (r *Fetcher) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) {
parsed, err := r.parseObject(id)
if err != nil {
return nil, err
@@ -17,7 +17,7 @@ func (r *Resolver) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree],
tree, ok := parsed.(*tree.Tree)
if !ok {
- return nil, fmt.Errorf("object/resolve: expected tree object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected tree object %s, got %v", id, parsed.ObjectType())
}
return stored.New(id, tree), nil
diff --git a/object/resolve/exact_tree_reader.go b/object/fetch/exact_tree_reader.go
index 8d9ec821..4660bd34 100644
--- a/object/resolve/exact_tree_reader.go
+++ b/object/fetch/exact_tree_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -11,6 +11,6 @@ import (
// together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) ExactTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) ExactTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
return r.exactReader(id, objecttype.TypeTree, "tree")
}
diff --git a/object/fetch/fetcher.go b/object/fetch/fetcher.go
new file mode 100644
index 00000000..ed4e74a1
--- /dev/null
+++ b/object/fetch/fetcher.go
@@ -0,0 +1,17 @@
+package fetch
+
+import objectstorer "codeberg.org/lindenii/furgit/object/storer"
+
+// Fetcher resolves parsed and streamed objects from an object store.
+//
+// A Fetcher does not take ownership of the store and does not close it.
+type Fetcher struct {
+ store objectstorer.Store
+}
+
+// New returns a Fetcher that reads objects from store.
+//
+// The returned Fetcher does not take ownership of store.
+func New(store objectstorer.Store) *Fetcher {
+ return &Fetcher{store: store}
+}
diff --git a/object/resolve/object_parse.go b/object/fetch/object_parse.go
index 8e8d8bde..a29e17c0 100644
--- a/object/resolve/object_parse.go
+++ b/object/fetch/object_parse.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -8,7 +8,7 @@ import (
objecttype "codeberg.org/lindenii/furgit/object/type"
)
-func (r *Resolver) parseObject(id objectid.ObjectID) (object.Object, error) {
+func (r *Fetcher) parseObject(id objectid.ObjectID) (object.Object, error) {
ty, content, err := r.store.ReadBytesContent(id)
if err != nil {
return nil, err
@@ -21,7 +21,7 @@ func (r *Resolver) parseObject(id objectid.ObjectID) (object.Object, error) {
tyName = fmt.Sprintf("type %d", ty)
}
- return nil, fmt.Errorf("object/resolve: parse object %s (%s): %w", id, tyName, err)
+ return nil, fmt.Errorf("object/fetch: parse object %s (%s): %w", id, tyName, err)
}
return parsed, nil
diff --git a/object/resolve/path.go b/object/fetch/path.go
index d11f3b48..f26379c3 100644
--- a/object/resolve/path.go
+++ b/object/fetch/path.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -11,7 +11,7 @@ import (
type PathEmptyError struct{}
func (err *PathEmptyError) Error() string {
- return "object/resolve: empty tree path"
+ return "object/fetch: empty tree path"
}
// PathSegmentEmptyError indicates that one path segment is empty.
@@ -20,7 +20,7 @@ type PathSegmentEmptyError struct {
}
func (err *PathSegmentEmptyError) Error() string {
- return fmt.Sprintf("object/resolve: empty tree path segment at index %d", err.Index)
+ return fmt.Sprintf("object/fetch: empty tree path segment at index %d", err.Index)
}
// PathNotFoundError indicates that one tree path segment was not found.
@@ -30,7 +30,7 @@ type PathNotFoundError struct {
}
func (err *PathNotFoundError) Error() string {
- return fmt.Sprintf("object/resolve: tree entry %q not found at index %d", err.Name, err.Index)
+ return fmt.Sprintf("object/fetch: tree entry %q not found at index %d", err.Name, err.Index)
}
// PathNotTreeError indicates that one intermediate path segment was not a tree.
@@ -40,7 +40,7 @@ type PathNotTreeError struct {
}
func (err *PathNotTreeError) Error() string {
- return fmt.Sprintf("object/resolve: path segment %q at index %d is not a tree", err.Name, err.Index)
+ return fmt.Sprintf("object/fetch: path segment %q at index %d is not a tree", err.Name, err.Index)
}
// Path resolves parts within the tree identified by root and returns the final
@@ -59,7 +59,7 @@ func (err *PathNotTreeError) Error() string {
//
// If your entry names are valid UTF-8 and uses / solely as segment separators,
// it may be convenient to use TreeFS for an io/fs.FS-like interface.
-func (r *Resolver) Path(root objectid.ObjectID, parts [][]byte) (tree.TreeEntry, error) {
+func (r *Fetcher) Path(root objectid.ObjectID, parts [][]byte) (tree.TreeEntry, error) {
if len(parts) == 0 {
return tree.TreeEntry{}, &PathEmptyError{}
}
diff --git a/object/resolve/peel_to_blob.go b/object/fetch/peel_to_blob.go
index c8aec1ad..b0a1ad1c 100644
--- a/object/resolve/peel_to_blob.go
+++ b/object/fetch/peel_to_blob.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -10,7 +10,7 @@ import (
)
// PeelToBlob peels tags until it reaches a blob.
-func (r *Resolver) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) {
+func (r *Fetcher) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) {
for {
obj, err := r.ExactObject(id)
if err != nil {
@@ -23,7 +23,7 @@ func (r *Resolver) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob],
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/resolve: expected blob-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, parsed.ObjectType())
}
}
}
diff --git a/object/resolve/peel_to_blob_id.go b/object/fetch/peel_to_blob_id.go
index c3467cf2..9d13f640 100644
--- a/object/resolve/peel_to_blob_id.go
+++ b/object/fetch/peel_to_blob_id.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -8,7 +8,7 @@ import (
)
// PeelToBlobID peels tags until it reaches a blob object ID.
-func (r *Resolver) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error) {
+func (r *Fetcher) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error) {
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
@@ -31,9 +31,9 @@ func (r *Resolver) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error)
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected blob-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, ty)
default:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected blob-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected blob-ish object %s, got %v", id, ty)
}
}
}
diff --git a/object/resolve/peel_to_blob_reader.go b/object/fetch/peel_to_blob_reader.go
index d3bc7f49..d7072531 100644
--- a/object/resolve/peel_to_blob_reader.go
+++ b/object/fetch/peel_to_blob_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -8,7 +8,7 @@ import (
// PeelToBlobReader returns a reader for the content of the peeled blob at id,
// together with its content size in bytes.
-func (r *Resolver) PeelToBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) PeelToBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
blobID, err := r.PeelToBlobID(id)
if err != nil {
return nil, 0, err
diff --git a/object/resolve/peel_to_commit.go b/object/fetch/peel_to_commit.go
index 0272dd83..5ec66411 100644
--- a/object/resolve/peel_to_commit.go
+++ b/object/fetch/peel_to_commit.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -10,7 +10,7 @@ import (
)
// PeelToCommit peels tags until it reaches a commit.
-func (r *Resolver) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) {
+func (r *Fetcher) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) {
for {
obj, err := r.ExactObject(id)
if err != nil {
@@ -23,7 +23,7 @@ func (r *Resolver) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Co
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/resolve: expected commit-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, parsed.ObjectType())
}
}
}
diff --git a/object/resolve/peel_to_commit_id.go b/object/fetch/peel_to_commit_id.go
index 972823ce..b6b257cf 100644
--- a/object/resolve/peel_to_commit_id.go
+++ b/object/fetch/peel_to_commit_id.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -8,7 +8,7 @@ import (
)
// PeelToCommitID peels tags until it reaches a commit object ID.
-func (r *Resolver) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error) {
+func (r *Fetcher) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error) {
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
@@ -31,9 +31,9 @@ func (r *Resolver) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, erro
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected commit-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, ty)
default:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected commit-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected commit-ish object %s, got %v", id, ty)
}
}
}
diff --git a/object/resolve/peel_to_commit_reader.go b/object/fetch/peel_to_commit_reader.go
index 6972eff3..02bf9f6f 100644
--- a/object/resolve/peel_to_commit_reader.go
+++ b/object/fetch/peel_to_commit_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -10,7 +10,7 @@ import (
// id, together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) PeelToCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) PeelToCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
commitID, err := r.PeelToCommitID(id)
if err != nil {
return nil, 0, err
diff --git a/object/resolve/peel_to_tag.go b/object/fetch/peel_to_tag.go
index e131f4c1..60693069 100644
--- a/object/resolve/peel_to_tag.go
+++ b/object/fetch/peel_to_tag.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
objectid "codeberg.org/lindenii/furgit/object/id"
@@ -7,6 +7,6 @@ import (
)
// PeelToTag returns the tag at id without further peeling.
-func (r *Resolver) PeelToTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) {
+func (r *Fetcher) PeelToTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) {
return r.ExactTag(id)
}
diff --git a/object/resolve/peel_to_tag_id.go b/object/fetch/peel_to_tag_id.go
index 275ef561..dc02c60a 100644
--- a/object/resolve/peel_to_tag_id.go
+++ b/object/fetch/peel_to_tag_id.go
@@ -1,8 +1,8 @@
-package resolve
+package fetch
import objectid "codeberg.org/lindenii/furgit/object/id"
// PeelToTagID returns id unchanged.
-func (r *Resolver) PeelToTagID(id objectid.ObjectID) (objectid.ObjectID, error) {
+func (r *Fetcher) PeelToTagID(id objectid.ObjectID) (objectid.ObjectID, error) {
return id, nil
}
diff --git a/object/resolve/peel_to_tag_reader.go b/object/fetch/peel_to_tag_reader.go
index 77279511..562ef9e8 100644
--- a/object/resolve/peel_to_tag_reader.go
+++ b/object/fetch/peel_to_tag_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -10,7 +10,7 @@ import (
// together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) PeelToTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) PeelToTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
tagID, err := r.PeelToTagID(id)
if err != nil {
return nil, 0, err
diff --git a/object/resolve/peel_to_tree.go b/object/fetch/peel_to_tree.go
index 2f2da4d7..119e76ac 100644
--- a/object/resolve/peel_to_tree.go
+++ b/object/fetch/peel_to_tree.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -12,7 +12,7 @@ import (
// PeelToTree peels tags until it reaches a tree or commit. If it reaches a
// commit, it returns the commit's root tree.
-func (r *Resolver) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) {
+func (r *Fetcher) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) {
for {
obj, err := r.ExactObject(id)
if err != nil {
@@ -27,7 +27,7 @@ func (r *Resolver) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree],
case *tag.Tag:
id = parsed.Target
default:
- return nil, fmt.Errorf("object/resolve: expected tree-ish object %s, got %v", id, parsed.ObjectType())
+ return nil, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, parsed.ObjectType())
}
}
}
diff --git a/object/resolve/peel_to_tree_id.go b/object/fetch/peel_to_tree_id.go
index bacee65e..21dcfde4 100644
--- a/object/resolve/peel_to_tree_id.go
+++ b/object/fetch/peel_to_tree_id.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -9,7 +9,7 @@ import (
// PeelToTreeID peels tags until it reaches a tree object ID, or a commit whose
// root tree object ID is then returned.
-func (r *Resolver) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error) {
+func (r *Fetcher) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error) {
for {
ty, _, err := r.store.ReadHeader(id)
if err != nil {
@@ -38,9 +38,9 @@ func (r *Resolver) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error)
objecttype.TypeFuture,
objecttype.TypeOfsDelta,
objecttype.TypeRefDelta:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected tree-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, ty)
default:
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: expected tree-ish object %s, got %v", id, ty)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: expected tree-ish object %s, got %v", id, ty)
}
}
}
diff --git a/object/resolve/peel_to_tree_reader.go b/object/fetch/peel_to_tree_reader.go
index 515224ed..fe1c5b93 100644
--- a/object/resolve/peel_to_tree_reader.go
+++ b/object/fetch/peel_to_tree_reader.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io"
@@ -10,7 +10,7 @@ import (
// together with its content size in bytes.
//
// Usage of this method is unusual.
-func (r *Resolver) PeelToTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
+func (r *Fetcher) PeelToTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) {
treeID, err := r.PeelToTreeID(id)
if err != nil {
return nil, 0, err
diff --git a/object/resolve/treefs.go b/object/fetch/treefs.go
index a080d56d..06b6ad25 100644
--- a/object/resolve/treefs.go
+++ b/object/fetch/treefs.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io/fs"
@@ -14,9 +14,9 @@ import (
// valid fs.FS paths. Tree entries that cannot be represented under those rules
// are not addressable through this API.
//
-// TreeFS does not take ownership of its Resolver.
+// TreeFS does not take ownership of its Fetcher.
type TreeFS struct {
- resolver *Resolver
+ resolver *Fetcher
rootTree objectid.ObjectID
rootEntry *tree.TreeEntry
}
diff --git a/object/resolve/treefs_entry.go b/object/fetch/treefs_entry.go
index 6d23e282..4aa7730a 100644
--- a/object/resolve/treefs_entry.go
+++ b/object/fetch/treefs_entry.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"errors"
@@ -68,7 +68,7 @@ func (entry treeEntryValue) isDir() bool {
return entry.mode == tree.FileModeDir
}
-func (entry treeEntryValue) blobSize(resolve *Resolver) (int64, error) {
+func (entry treeEntryValue) blobSize(resolve *Fetcher) (int64, error) {
_, size, err := resolve.store.ReadHeader(entry.objectID)
if err != nil {
return 0, err
@@ -83,7 +83,7 @@ func (entry treeEntryValue) subtreeID() (objectid.ObjectID, error) {
}
if entry.mode != tree.FileModeDir {
- return objectid.ObjectID{}, fmt.Errorf("object/resolve: path %q is not a tree", entry.name)
+ return objectid.ObjectID{}, fmt.Errorf("object/fetch: path %q is not a tree", entry.name)
}
return entry.objectID, nil
diff --git a/object/resolve/treefs_info.go b/object/fetch/treefs_info.go
index f8eb1e9e..eecf183d 100644
--- a/object/resolve/treefs_info.go
+++ b/object/fetch/treefs_info.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io/fs"
diff --git a/object/resolve/treefs_new.go b/object/fetch/treefs_new.go
index 9f5fe77d..d2224fcf 100644
--- a/object/resolve/treefs_new.go
+++ b/object/fetch/treefs_new.go
@@ -1,10 +1,10 @@
-package resolve
+package fetch
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.
-func (r *Resolver) TreeFS(root objectid.ObjectID) (*TreeFS, error) {
+func (r *Fetcher) TreeFS(root objectid.ObjectID) (*TreeFS, error) {
rootTree, err := r.PeelToTreeID(root)
if err != nil {
return nil, err
diff --git a/object/resolve/treefs_op.go b/object/fetch/treefs_op.go
index ed93ec85..f0472923 100644
--- a/object/resolve/treefs_op.go
+++ b/object/fetch/treefs_op.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
type treeFSOp uint8
diff --git a/object/resolve/treefs_open.go b/object/fetch/treefs_open.go
index 8e2b3588..59c6ec5d 100644
--- a/object/resolve/treefs_open.go
+++ b/object/fetch/treefs_open.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -58,7 +58,7 @@ func (treeFS *TreeFS) Open(name string) (fs.File, error) {
}
if entry.mode == tree.FileModeGitlink {
- return nil, treeFSPathError(treeFSOpOpen, name, fmt.Errorf("object/resolve: gitlink entries are not readable as files"))
+ return nil, treeFSPathError(treeFSOpOpen, name, fmt.Errorf("object/fetch: gitlink entries are not readable as files"))
}
reader, _, err := treeFS.resolver.ExactBlobReader(entry.objectID)
diff --git a/object/resolve/treefs_path.go b/object/fetch/treefs_path.go
index c35791cb..7aa31c7f 100644
--- a/object/resolve/treefs_path.go
+++ b/object/fetch/treefs_path.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"io/fs"
diff --git a/object/resolve/treefs_readdir.go b/object/fetch/treefs_readdir.go
index 5516de33..7518c607 100644
--- a/object/resolve/treefs_readdir.go
+++ b/object/fetch/treefs_readdir.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import "io/fs"
diff --git a/object/resolve/treefs_readfile.go b/object/fetch/treefs_readfile.go
index e1d514a3..d3671f07 100644
--- a/object/resolve/treefs_readfile.go
+++ b/object/fetch/treefs_readfile.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import (
"fmt"
@@ -21,7 +21,7 @@ func (treeFS *TreeFS) ReadFile(name string) ([]byte, error) {
}
if entry.mode == tree.FileModeGitlink {
- return nil, treeFSPathError(treeFSOpReadFile, name, fmt.Errorf("object/resolve: gitlink entries are not readable as files"))
+ return nil, treeFSPathError(treeFSOpReadFile, name, fmt.Errorf("object/fetch: gitlink entries are not readable as files"))
}
reader, _, err := treeFS.resolver.ExactBlobReader(entry.objectID)
diff --git a/object/resolve/treefs_stat.go b/object/fetch/treefs_stat.go
index 396dfbae..7d7a6418 100644
--- a/object/resolve/treefs_stat.go
+++ b/object/fetch/treefs_stat.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import "io/fs"
diff --git a/object/resolve/treefs_sub.go b/object/fetch/treefs_sub.go
index f0eefdc5..faf47092 100644
--- a/object/resolve/treefs_sub.go
+++ b/object/fetch/treefs_sub.go
@@ -1,4 +1,4 @@
-package resolve
+package fetch
import "io/fs"
diff --git a/object/resolve/treefs_test.go b/object/fetch/treefs_test.go
index 59eebd5e..067283f7 100644
--- a/object/resolve/treefs_test.go
+++ b/object/fetch/treefs_test.go
@@ -1,4 +1,4 @@
-package resolve_test
+package fetch_test
import (
"errors"
@@ -7,7 +7,7 @@ import (
"codeberg.org/lindenii/furgit/internal/testgit"
objectid "codeberg.org/lindenii/furgit/object/id"
- "codeberg.org/lindenii/furgit/object/resolve"
+ "codeberg.org/lindenii/furgit/object/fetch"
"codeberg.org/lindenii/furgit/object/tree"
"codeberg.org/lindenii/furgit/repository"
)
@@ -41,7 +41,7 @@ func TestTreeFS(t *testing.T) {
defer func() { _ = repo.Close() }()
- resolver := resolve.New(repo.Objects())
+ resolver := fetch.New(repo.Objects())
treeFS, err := resolver.TreeFS(commitID)
if err != nil {
diff --git a/object/resolve/resolver.go b/object/resolve/resolver.go
deleted file mode 100644
index f5e4e8c3..00000000
--- a/object/resolve/resolver.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package resolve
-
-import objectstorer "codeberg.org/lindenii/furgit/object/storer"
-
-// Resolver resolves parsed and streamed objects from an object store.
-//
-// A Resolver does not take ownership of the store and does not close it.
-type Resolver struct {
- store objectstorer.Store
-}
-
-// New returns a Resolver that reads objects from store.
-//
-// The returned Resolver does not take ownership of store.
-func New(store objectstorer.Store) *Resolver {
- return &Resolver{store: store}
-}
diff --git a/repository/resolver.go b/repository/resolver.go
index ed87fa09..920045c5 100644
--- a/repository/resolver.go
+++ b/repository/resolver.go
@@ -1,11 +1,11 @@
package repository
-import "codeberg.org/lindenii/furgit/object/resolve"
+import "codeberg.org/lindenii/furgit/object/fetch"
// Resolver returns an object resolver backed by the repository's object store.
//
// The returned resolver is ready for use, borrows the repository's object
// store, does not need closing, and must not be used after Close.
-func (repo *Repository) Resolver() *resolve.Resolver {
- return resolve.New(repo.objects)
+func (repo *Repository) Resolver() *fetch.Fetcher {
+ return fetch.New(repo.objects)
}