aboutsummaryrefslogtreecommitdiff
path: root/object
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-31 03:02:16 +0000
committerGravatar Runxi Yu2026-03-31 03:02:16 +0000
commit49f93cd54dfa46c488875139499dad13f4cf61db (patch)
tree318fe6f7b0a2a4d42577fde04dae0294d6e84a7d /object
parentref/store: Simplify names (diff)
signatureNo signature
object/fetch: Cleanup and add header/size
Diffstat (limited to 'object')
-rw-r--r--object/fetch/doc.go5
-rw-r--r--object/fetch/exact_commit_reader.go18
-rw-r--r--object/fetch/exact_tag_reader.go18
-rw-r--r--object/fetch/exact_tree_reader.go18
-rw-r--r--object/fetch/fetcher.go5
-rw-r--r--object/fetch/header.go18
-rw-r--r--object/fetch/peel_to_blob_id.go4
-rw-r--r--object/fetch/peel_to_commit_id.go4
-rw-r--r--object/fetch/peel_to_commit_reader.go22
-rw-r--r--object/fetch/peel_to_tree_id.go4
-rw-r--r--object/fetch/peel_to_tree_reader.go22
-rw-r--r--object/fetch/size.go10
-rw-r--r--object/fetch/treefs_entry.go7
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) {