diff options
| author | 2026-03-28 16:46:30 +0000 | |
|---|---|---|
| committer | 2026-03-28 16:46:30 +0000 | |
| commit | f87db5f65f61709a44e111fc47bfbb0865b2067b (patch) | |
| tree | d2da282f2df4596784692bf47b1f1efd8c4e2714 /object | |
| parent | object/{blob,commit,tag}: Update docs (diff) | |
| signature | No signature | |
object/fetch: Update docs and rename resolver->fetcher
Diffstat (limited to 'object')
28 files changed, 55 insertions, 19 deletions
diff --git a/object/fetch/doc.go b/object/fetch/doc.go index 17657dbe..8b51ac10 100644 --- a/object/fetch/doc.go +++ b/object/fetch/doc.go @@ -1,5 +1,3 @@ // Package fetch resolves stored Git objects by exact type, by peeling // tree-ish or commit-ish references, and by path within trees. -// -// A Fetcher does not take ownership of the underlying object store. package fetch diff --git a/object/fetch/exact_blob.go b/object/fetch/exact_blob.go index 96ededdc..8b0378ea 100644 --- a/object/fetch/exact_blob.go +++ b/object/fetch/exact_blob.go @@ -9,6 +9,8 @@ import ( ) // ExactBlob reads, parses, and wraps the blob at id. +// +// Labels: Life-Parent. func (r *Fetcher) ExactBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) { parsed, err := r.parseObject(id) if err != nil { diff --git a/object/fetch/exact_blob_reader.go b/object/fetch/exact_blob_reader.go index 95f5e1aa..ee0fc21a 100644 --- a/object/fetch/exact_blob_reader.go +++ b/object/fetch/exact_blob_reader.go @@ -9,6 +9,8 @@ import ( // ExactBlobReader returns a reader for the content of the blob at id, // together with its content size in bytes. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) ExactBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { return r.exactReader(id, objecttype.TypeBlob, "blob") } diff --git a/object/fetch/exact_commit.go b/object/fetch/exact_commit.go index d3f9dee1..1b330e7d 100644 --- a/object/fetch/exact_commit.go +++ b/object/fetch/exact_commit.go @@ -9,6 +9,8 @@ import ( ) // ExactCommit reads, parses, and wraps the commit at id. +// +// Labels: Life-Parent. func (r *Fetcher) ExactCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) { parsed, err := r.parseObject(id) if err != nil { diff --git a/object/fetch/exact_commit_reader.go b/object/fetch/exact_commit_reader.go index 5ccae4b1..484fd89f 100644 --- a/object/fetch/exact_commit_reader.go +++ b/object/fetch/exact_commit_reader.go @@ -11,6 +11,8 @@ import ( // together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) ExactCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { return r.exactReader(id, objecttype.TypeCommit, "commit") } diff --git a/object/fetch/exact_object.go b/object/fetch/exact_object.go index 869d811f..2e4a8217 100644 --- a/object/fetch/exact_object.go +++ b/object/fetch/exact_object.go @@ -8,6 +8,8 @@ import ( // ExactObject reads, parses, and wraps the object at id without constraining // its concrete object kind. +// +// Labels: Life-Parent. func (r *Fetcher) ExactObject(id objectid.ObjectID) (*stored.Stored[object.Object], error) { parsed, err := r.parseObject(id) if err != nil { diff --git a/object/fetch/exact_tag.go b/object/fetch/exact_tag.go index 03c66019..e50cc565 100644 --- a/object/fetch/exact_tag.go +++ b/object/fetch/exact_tag.go @@ -9,6 +9,8 @@ import ( ) // ExactTag reads, parses, and wraps the tag at id. +// +// Labels: Life-Parent. func (r *Fetcher) ExactTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) { parsed, err := r.parseObject(id) if err != nil { diff --git a/object/fetch/exact_tag_reader.go b/object/fetch/exact_tag_reader.go index 79a31a4c..d5e4f2c4 100644 --- a/object/fetch/exact_tag_reader.go +++ b/object/fetch/exact_tag_reader.go @@ -11,6 +11,8 @@ import ( // together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) ExactTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { return r.exactReader(id, objecttype.TypeTag, "tag") } diff --git a/object/fetch/exact_tree.go b/object/fetch/exact_tree.go index cab10ba2..71d4c2b9 100644 --- a/object/fetch/exact_tree.go +++ b/object/fetch/exact_tree.go @@ -9,6 +9,8 @@ import ( ) // ExactTree reads, parses, and wraps the tree at id. +// +// Labels: Life-Parent. func (r *Fetcher) ExactTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) { parsed, err := r.parseObject(id) if err != nil { diff --git a/object/fetch/exact_tree_reader.go b/object/fetch/exact_tree_reader.go index 4660bd34..d8fca5dc 100644 --- a/object/fetch/exact_tree_reader.go +++ b/object/fetch/exact_tree_reader.go @@ -11,6 +11,8 @@ import ( // together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. 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 index b3787480..895b32f7 100644 --- a/object/fetch/fetcher.go +++ b/object/fetch/fetcher.go @@ -4,14 +4,14 @@ import objectstore "codeberg.org/lindenii/furgit/object/store" // Fetcher resolves parsed and streamed objects from an object store. // -// A Fetcher does not take ownership of the store and does not close it. +// Labels: MT-Safe. type Fetcher struct { store objectstore.ReadingStore } // New returns a Fetcher that reads objects from store. // -// The returned Fetcher does not take ownership of store. +// Labels: Deps-Borrowed. func New(store objectstore.ReadingStore) *Fetcher { return &Fetcher{store: store} } diff --git a/object/fetch/path.go b/object/fetch/path.go index f26379c3..e3c468db 100644 --- a/object/fetch/path.go +++ b/object/fetch/path.go @@ -59,6 +59,8 @@ 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. +// +// Labels: Life-Parent. func (r *Fetcher) Path(root objectid.ObjectID, parts [][]byte) (tree.TreeEntry, error) { if len(parts) == 0 { return tree.TreeEntry{}, &PathEmptyError{} diff --git a/object/fetch/peel_to_blob.go b/object/fetch/peel_to_blob.go index b0a1ad1c..eea1487c 100644 --- a/object/fetch/peel_to_blob.go +++ b/object/fetch/peel_to_blob.go @@ -10,6 +10,8 @@ import ( ) // PeelToBlob peels tags until it reaches a blob. +// +// Labels: Life-Parent. func (r *Fetcher) PeelToBlob(id objectid.ObjectID) (*stored.Stored[*blob.Blob], error) { for { obj, err := r.ExactObject(id) diff --git a/object/fetch/peel_to_blob_reader.go b/object/fetch/peel_to_blob_reader.go index d7072531..dedffd01 100644 --- a/object/fetch/peel_to_blob_reader.go +++ b/object/fetch/peel_to_blob_reader.go @@ -8,6 +8,8 @@ import ( // PeelToBlobReader returns a reader for the content of the peeled blob at id, // together with its content size in bytes. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) PeelToBlobReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { blobID, err := r.PeelToBlobID(id) if err != nil { diff --git a/object/fetch/peel_to_commit.go b/object/fetch/peel_to_commit.go index 5ec66411..4a88f6f4 100644 --- a/object/fetch/peel_to_commit.go +++ b/object/fetch/peel_to_commit.go @@ -10,6 +10,8 @@ import ( ) // PeelToCommit peels tags until it reaches a commit. +// +// Labels: Life-Parent. func (r *Fetcher) PeelToCommit(id objectid.ObjectID) (*stored.Stored[*commit.Commit], error) { for { obj, err := r.ExactObject(id) diff --git a/object/fetch/peel_to_commit_reader.go b/object/fetch/peel_to_commit_reader.go index 02bf9f6f..3b4cf824 100644 --- a/object/fetch/peel_to_commit_reader.go +++ b/object/fetch/peel_to_commit_reader.go @@ -10,6 +10,8 @@ import ( // id, together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) PeelToCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { commitID, err := r.PeelToCommitID(id) if err != nil { diff --git a/object/fetch/peel_to_tag.go b/object/fetch/peel_to_tag.go index 60693069..bd75182b 100644 --- a/object/fetch/peel_to_tag.go +++ b/object/fetch/peel_to_tag.go @@ -7,6 +7,8 @@ import ( ) // PeelToTag returns the tag at id without further peeling. +// +// Labels: Life-Parent. func (r *Fetcher) PeelToTag(id objectid.ObjectID) (*stored.Stored[*tag.Tag], error) { return r.ExactTag(id) } diff --git a/object/fetch/peel_to_tag_reader.go b/object/fetch/peel_to_tag_reader.go index 562ef9e8..26de4e24 100644 --- a/object/fetch/peel_to_tag_reader.go +++ b/object/fetch/peel_to_tag_reader.go @@ -10,6 +10,8 @@ import ( // together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) PeelToTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { tagID, err := r.PeelToTagID(id) if err != nil { diff --git a/object/fetch/peel_to_tree.go b/object/fetch/peel_to_tree.go index 119e76ac..5446eac0 100644 --- a/object/fetch/peel_to_tree.go +++ b/object/fetch/peel_to_tree.go @@ -12,6 +12,8 @@ import ( // PeelToTree peels tags until it reaches a tree or commit. If it reaches a // commit, it returns the commit's root tree. +// +// Labels: Life-Parent. func (r *Fetcher) PeelToTree(id objectid.ObjectID) (*stored.Stored[*tree.Tree], error) { for { obj, err := r.ExactObject(id) diff --git a/object/fetch/peel_to_tree_reader.go b/object/fetch/peel_to_tree_reader.go index fe1c5b93..260ba0da 100644 --- a/object/fetch/peel_to_tree_reader.go +++ b/object/fetch/peel_to_tree_reader.go @@ -10,6 +10,8 @@ import ( // together with its content size in bytes. // // Usage of this method is unusual. +// +// Labels: Life-Parent, Close-Caller. func (r *Fetcher) PeelToTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { treeID, err := r.PeelToTreeID(id) if err != nil { diff --git a/object/fetch/treefs.go b/object/fetch/treefs.go index 06b6ad25..39ea7ad5 100644 --- a/object/fetch/treefs.go +++ b/object/fetch/treefs.go @@ -7,16 +7,16 @@ import ( "codeberg.org/lindenii/furgit/object/tree" ) -// TreeFS exposes one Git tree as an fs.FS. +// TreeFS exposes one Git tree as an fs.FS view backed by a Fetcher. // // TreeFS interprets names using io/fs path rules. Those rules do not match raw // Git tree entry naming exactly: names are UTF-8, slash-separated, and must be // 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 Fetcher. +// Labels: MT-Safe. type TreeFS struct { - resolver *Fetcher + fetcher *Fetcher rootTree objectid.ObjectID rootEntry *tree.TreeEntry } diff --git a/object/fetch/treefs_entry.go b/object/fetch/treefs_entry.go index 4aa7730a..885e5afe 100644 --- a/object/fetch/treefs_entry.go +++ b/object/fetch/treefs_entry.go @@ -23,7 +23,7 @@ func (treeFS *TreeFS) resolvePath(op treeFSOp, name string) (treeEntryValue, err }, nil } - entry, err := treeFS.resolver.Path(treeFS.rootTree, treeFSSplitPath(name)) + entry, err := treeFS.fetcher.Path(treeFS.rootTree, treeFSSplitPath(name)) if err != nil { return treeEntryValue{}, treeFS.pathResolveError(op, name, err) } @@ -68,8 +68,8 @@ func (entry treeEntryValue) isDir() bool { return entry.mode == tree.FileModeDir } -func (entry treeEntryValue) blobSize(resolve *Fetcher) (int64, error) { - _, size, err := resolve.store.ReadHeader(entry.objectID) +func (entry treeEntryValue) blobSize(fetcher *Fetcher) (int64, error) { + _, size, err := fetcher.store.ReadHeader(entry.objectID) if err != nil { return 0, err } diff --git a/object/fetch/treefs_info.go b/object/fetch/treefs_info.go index eecf183d..f1db7e9a 100644 --- a/object/fetch/treefs_info.go +++ b/object/fetch/treefs_info.go @@ -54,7 +54,7 @@ func (treeFS *TreeFS) statEntry(entry treeEntryValue) (*treeFSInfo, error) { if entry.mode == tree.FileModeRegular || entry.mode == tree.FileModeExecutable || entry.mode == tree.FileModeSymlink { var err error - size, err = entry.blobSize(treeFS.resolver) + size, err = entry.blobSize(treeFS.fetcher) if err != nil { return nil, err } diff --git a/object/fetch/treefs_new.go b/object/fetch/treefs_new.go index d2224fcf..e8a25dc9 100644 --- a/object/fetch/treefs_new.go +++ b/object/fetch/treefs_new.go @@ -4,6 +4,8 @@ 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. +// +// Labels: Deps-Borrowed, Life-Parent, Close-No. func (r *Fetcher) TreeFS(root objectid.ObjectID) (*TreeFS, error) { rootTree, err := r.PeelToTreeID(root) if err != nil { @@ -11,7 +13,7 @@ func (r *Fetcher) TreeFS(root objectid.ObjectID) (*TreeFS, error) { } return &TreeFS{ - resolver: r, + fetcher: r, rootTree: rootTree, }, nil } diff --git a/object/fetch/treefs_open.go b/object/fetch/treefs_open.go index 59c6ec5d..fc0f7635 100644 --- a/object/fetch/treefs_open.go +++ b/object/fetch/treefs_open.go @@ -29,7 +29,7 @@ func (treeFS *TreeFS) Open(name string) (fs.File, error) { return nil, treeFSPathError(treeFSOpOpen, name, err) } - tree, err := treeFS.resolver.ExactTree(treeID) + tree, err := treeFS.fetcher.ExactTree(treeID) if err != nil { return nil, treeFSPathError(treeFSOpOpen, name, err) } @@ -61,7 +61,7 @@ func (treeFS *TreeFS) Open(name string) (fs.File, error) { return nil, treeFSPathError(treeFSOpOpen, name, fmt.Errorf("object/fetch: gitlink entries are not readable as files")) } - reader, _, err := treeFS.resolver.ExactBlobReader(entry.objectID) + reader, _, err := treeFS.fetcher.ExactBlobReader(entry.objectID) if err != nil { return nil, treeFSPathError(treeFSOpOpen, name, err) } diff --git a/object/fetch/treefs_readfile.go b/object/fetch/treefs_readfile.go index d3671f07..b248135f 100644 --- a/object/fetch/treefs_readfile.go +++ b/object/fetch/treefs_readfile.go @@ -24,7 +24,7 @@ func (treeFS *TreeFS) ReadFile(name string) ([]byte, error) { return nil, treeFSPathError(treeFSOpReadFile, name, fmt.Errorf("object/fetch: gitlink entries are not readable as files")) } - reader, _, err := treeFS.resolver.ExactBlobReader(entry.objectID) + reader, _, err := treeFS.fetcher.ExactBlobReader(entry.objectID) if err != nil { return nil, treeFSPathError(treeFSOpReadFile, name, err) } diff --git a/object/fetch/treefs_sub.go b/object/fetch/treefs_sub.go index faf47092..c303d16d 100644 --- a/object/fetch/treefs_sub.go +++ b/object/fetch/treefs_sub.go @@ -15,7 +15,7 @@ func (treeFS *TreeFS) Sub(dir string) (fs.FS, error) { } return &TreeFS{ - resolver: treeFS.resolver, + fetcher: treeFS.fetcher, rootTree: treeID, rootEntry: entry.treeEntry, }, nil diff --git a/object/fetch/treefs_test.go b/object/fetch/treefs_test.go index c8414967..ba5d4127 100644 --- a/object/fetch/treefs_test.go +++ b/object/fetch/treefs_test.go @@ -41,11 +41,11 @@ func TestTreeFS(t *testing.T) { defer func() { _ = repo.Close() }() - resolver := fetch.New(repo.Objects()) + fetcher := fetch.New(repo.Objects()) - treeFS, err := resolver.TreeFS(commitID) + treeFS, err := fetcher.TreeFS(commitID) if err != nil { - t.Fatalf("resolver.TreeFS: %v", err) + t.Fatalf("fetcher.TreeFS: %v", err) } content, err := treeFS.ReadFile("plain.txt") |
