diff options
| -rw-r--r-- | object/fetch/doc.go | 5 | ||||
| -rw-r--r-- | object/fetch/exact_commit_reader.go | 18 | ||||
| -rw-r--r-- | object/fetch/exact_tag_reader.go | 18 | ||||
| -rw-r--r-- | object/fetch/exact_tree_reader.go | 18 | ||||
| -rw-r--r-- | object/fetch/fetcher.go | 5 | ||||
| -rw-r--r-- | object/fetch/header.go | 18 | ||||
| -rw-r--r-- | object/fetch/peel_to_blob_id.go | 4 | ||||
| -rw-r--r-- | object/fetch/peel_to_commit_id.go | 4 | ||||
| -rw-r--r-- | object/fetch/peel_to_commit_reader.go | 22 | ||||
| -rw-r--r-- | object/fetch/peel_to_tree_id.go | 4 | ||||
| -rw-r--r-- | object/fetch/peel_to_tree_reader.go | 22 | ||||
| -rw-r--r-- | object/fetch/size.go | 10 | ||||
| -rw-r--r-- | object/fetch/treefs_entry.go | 7 |
13 files changed, 42 insertions, 113 deletions
diff --git a/object/fetch/doc.go b/object/fetch/doc.go index 3908ef30..89bf9a98 100644 --- a/object/fetch/doc.go +++ b/object/fetch/doc.go @@ -2,6 +2,7 @@ // higher-level object queries. // // Fetching is above [objectstore]: it parses stored objects into blobs, trees, -// commits, and tags, peels tree-ish or commit-ish objects, resolves paths -// within trees, and can expose one tree as an [io/fs] view. +// commits, and tags, exposes object metadata, peels tree-ish or commit-ish +// objects, resolves paths within trees, and can expose one tree as an [io/fs] +// view. package fetch diff --git a/object/fetch/exact_commit_reader.go b/object/fetch/exact_commit_reader.go deleted file mode 100644 index 14533a4d..00000000 --- a/object/fetch/exact_commit_reader.go +++ /dev/null @@ -1,18 +0,0 @@ -package fetch - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" - objecttype "codeberg.org/lindenii/furgit/object/type" -) - -// ExactCommitReader returns a reader for the content of the commit at id, -// 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) -} diff --git a/object/fetch/exact_tag_reader.go b/object/fetch/exact_tag_reader.go deleted file mode 100644 index bba83a64..00000000 --- a/object/fetch/exact_tag_reader.go +++ /dev/null @@ -1,18 +0,0 @@ -package fetch - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" - objecttype "codeberg.org/lindenii/furgit/object/type" -) - -// ExactTagReader returns a reader for the content of the tag at id, -// 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) -} diff --git a/object/fetch/exact_tree_reader.go b/object/fetch/exact_tree_reader.go deleted file mode 100644 index 3504b9b1..00000000 --- a/object/fetch/exact_tree_reader.go +++ /dev/null @@ -1,18 +0,0 @@ -package fetch - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" - objecttype "codeberg.org/lindenii/furgit/object/type" -) - -// ExactTreeReader returns a reader for the content of the tree at id, -// 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) -} diff --git a/object/fetch/fetcher.go b/object/fetch/fetcher.go index 36eb808a..fcd64d88 100644 --- a/object/fetch/fetcher.go +++ b/object/fetch/fetcher.go @@ -2,7 +2,10 @@ package fetch import objectstore "codeberg.org/lindenii/furgit/object/store" -// Fetcher resolves parsed and streamed objects from an object store. +// Fetcher provides ordinary object access above an object store. +// +// It exposes object metadata, typed object loading, tree-ish and commit-ish +// peeling, path resolution, one-tree fs views, and blob content streaming. // // Labels: MT-Safe. type Fetcher struct { diff --git a/object/fetch/header.go b/object/fetch/header.go new file mode 100644 index 00000000..0a535dd9 --- /dev/null +++ b/object/fetch/header.go @@ -0,0 +1,18 @@ +package fetch + +import ( + objectid "codeberg.org/lindenii/furgit/object/id" + objecttype "codeberg.org/lindenii/furgit/object/type" +) + +// Header returns the object type and content size at id. +// +// Labels: Life-Parent. +func (r *Fetcher) Header(id objectid.ObjectID) (objecttype.Type, int64, error) { + ty, size, err := r.store.ReadHeader(id) + if err != nil { + return objecttype.TypeInvalid, 0, wrapObjectReadError(id, err) + } + + return ty, size, nil +} diff --git a/object/fetch/peel_to_blob_id.go b/object/fetch/peel_to_blob_id.go index 5b5da026..7a43b4cc 100644 --- a/object/fetch/peel_to_blob_id.go +++ b/object/fetch/peel_to_blob_id.go @@ -9,9 +9,9 @@ import ( // PeelToBlobID peels tags until it reaches a blob object ID. func (r *Fetcher) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error) { for { - ty, _, err := r.store.ReadHeader(id) + ty, _, err := r.Header(id) if err != nil { - return objectid.ObjectID{}, wrapObjectReadError(id, err) + return objectid.ObjectID{}, err } switch ty { diff --git a/object/fetch/peel_to_commit_id.go b/object/fetch/peel_to_commit_id.go index e5a0766f..7b58bdea 100644 --- a/object/fetch/peel_to_commit_id.go +++ b/object/fetch/peel_to_commit_id.go @@ -9,9 +9,9 @@ import ( // PeelToCommitID peels tags until it reaches a commit object ID. func (r *Fetcher) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error) { for { - ty, _, err := r.store.ReadHeader(id) + ty, _, err := r.Header(id) if err != nil { - return objectid.ObjectID{}, wrapObjectReadError(id, err) + return objectid.ObjectID{}, err } switch ty { diff --git a/object/fetch/peel_to_commit_reader.go b/object/fetch/peel_to_commit_reader.go deleted file mode 100644 index 3b4cf824..00000000 --- a/object/fetch/peel_to_commit_reader.go +++ /dev/null @@ -1,22 +0,0 @@ -package fetch - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" -) - -// PeelToCommitReader returns a reader for the content of the peeled commit at -// 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 { - return nil, 0, err - } - - return r.ExactCommitReader(commitID) -} diff --git a/object/fetch/peel_to_tree_id.go b/object/fetch/peel_to_tree_id.go index 5f951c04..4c9bdac9 100644 --- a/object/fetch/peel_to_tree_id.go +++ b/object/fetch/peel_to_tree_id.go @@ -10,9 +10,9 @@ import ( // root tree object ID is then returned. func (r *Fetcher) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error) { for { - ty, _, err := r.store.ReadHeader(id) + ty, _, err := r.Header(id) if err != nil { - return objectid.ObjectID{}, wrapObjectReadError(id, err) + return objectid.ObjectID{}, err } switch ty { diff --git a/object/fetch/peel_to_tree_reader.go b/object/fetch/peel_to_tree_reader.go deleted file mode 100644 index 260ba0da..00000000 --- a/object/fetch/peel_to_tree_reader.go +++ /dev/null @@ -1,22 +0,0 @@ -package fetch - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" -) - -// PeelToTreeReader returns a reader for the content of the peeled tree at id, -// 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 { - return nil, 0, err - } - - return r.ExactTreeReader(treeID) -} diff --git a/object/fetch/size.go b/object/fetch/size.go new file mode 100644 index 00000000..5eac9461 --- /dev/null +++ b/object/fetch/size.go @@ -0,0 +1,10 @@ +package fetch + +import objectid "codeberg.org/lindenii/furgit/object/id" + +// Size returns the object content size at id. +// +// Labels: Life-Parent. +func (r *Fetcher) Size(id objectid.ObjectID) (int64, error) { + return r.store.ReadSize(id) +} diff --git a/object/fetch/treefs_entry.go b/object/fetch/treefs_entry.go index 11c0ae23..e577d86c 100644 --- a/object/fetch/treefs_entry.go +++ b/object/fetch/treefs_entry.go @@ -69,12 +69,7 @@ func (entry treeEntryValue) isDir() bool { } func (entry treeEntryValue) blobSize(fetcher *Fetcher) (int64, error) { - _, size, err := fetcher.store.ReadHeader(entry.objectID) - if err != nil { - return 0, err - } - - return size, nil + return fetcher.Size(entry.objectID) } func (entry treeEntryValue) subtreeID() (objectid.ObjectID, error) { |
