Fast implementation of Git in pure Go codeberg.org/lindenii/furgit
git go
6
fork

Configure Feed

Select the types of activity you want to include in your feed.

object/fetch: Cleanup and add header/size

Runxi Yu 49f93cd5 da676456

+42 -113
+3 -2
object/fetch/doc.go
··· 2 2 // higher-level object queries. 3 3 // 4 4 // Fetching is above [objectstore]: it parses stored objects into blobs, trees, 5 - // commits, and tags, peels tree-ish or commit-ish objects, resolves paths 6 - // within trees, and can expose one tree as an [io/fs] view. 5 + // commits, and tags, exposes object metadata, peels tree-ish or commit-ish 6 + // objects, resolves paths within trees, and can expose one tree as an [io/fs] 7 + // view. 7 8 package fetch
-18
object/fetch/exact_commit_reader.go
··· 1 - package fetch 2 - 3 - import ( 4 - "io" 5 - 6 - objectid "codeberg.org/lindenii/furgit/object/id" 7 - objecttype "codeberg.org/lindenii/furgit/object/type" 8 - ) 9 - 10 - // ExactCommitReader returns a reader for the content of the commit at id, 11 - // together with its content size in bytes. 12 - // 13 - // Usage of this method is unusual. 14 - // 15 - // Labels: Life-Parent, Close-Caller. 16 - func (r *Fetcher) ExactCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { 17 - return r.exactReader(id, objecttype.TypeCommit) 18 - }
-18
object/fetch/exact_tag_reader.go
··· 1 - package fetch 2 - 3 - import ( 4 - "io" 5 - 6 - objectid "codeberg.org/lindenii/furgit/object/id" 7 - objecttype "codeberg.org/lindenii/furgit/object/type" 8 - ) 9 - 10 - // ExactTagReader returns a reader for the content of the tag at id, 11 - // together with its content size in bytes. 12 - // 13 - // Usage of this method is unusual. 14 - // 15 - // Labels: Life-Parent, Close-Caller. 16 - func (r *Fetcher) ExactTagReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { 17 - return r.exactReader(id, objecttype.TypeTag) 18 - }
-18
object/fetch/exact_tree_reader.go
··· 1 - package fetch 2 - 3 - import ( 4 - "io" 5 - 6 - objectid "codeberg.org/lindenii/furgit/object/id" 7 - objecttype "codeberg.org/lindenii/furgit/object/type" 8 - ) 9 - 10 - // ExactTreeReader returns a reader for the content of the tree at id, 11 - // together with its content size in bytes. 12 - // 13 - // Usage of this method is unusual. 14 - // 15 - // Labels: Life-Parent, Close-Caller. 16 - func (r *Fetcher) ExactTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { 17 - return r.exactReader(id, objecttype.TypeTree) 18 - }
+4 -1
object/fetch/fetcher.go
··· 2 2 3 3 import objectstore "codeberg.org/lindenii/furgit/object/store" 4 4 5 - // Fetcher resolves parsed and streamed objects from an object store. 5 + // Fetcher provides ordinary object access above an object store. 6 + // 7 + // It exposes object metadata, typed object loading, tree-ish and commit-ish 8 + // peeling, path resolution, one-tree fs views, and blob content streaming. 6 9 // 7 10 // Labels: MT-Safe. 8 11 type Fetcher struct {
+18
object/fetch/header.go
··· 1 + package fetch 2 + 3 + import ( 4 + objectid "codeberg.org/lindenii/furgit/object/id" 5 + objecttype "codeberg.org/lindenii/furgit/object/type" 6 + ) 7 + 8 + // Header returns the object type and content size at id. 9 + // 10 + // Labels: Life-Parent. 11 + func (r *Fetcher) Header(id objectid.ObjectID) (objecttype.Type, int64, error) { 12 + ty, size, err := r.store.ReadHeader(id) 13 + if err != nil { 14 + return objecttype.TypeInvalid, 0, wrapObjectReadError(id, err) 15 + } 16 + 17 + return ty, size, nil 18 + }
+2 -2
object/fetch/peel_to_blob_id.go
··· 9 9 // PeelToBlobID peels tags until it reaches a blob object ID. 10 10 func (r *Fetcher) PeelToBlobID(id objectid.ObjectID) (objectid.ObjectID, error) { 11 11 for { 12 - ty, _, err := r.store.ReadHeader(id) 12 + ty, _, err := r.Header(id) 13 13 if err != nil { 14 - return objectid.ObjectID{}, wrapObjectReadError(id, err) 14 + return objectid.ObjectID{}, err 15 15 } 16 16 17 17 switch ty {
+2 -2
object/fetch/peel_to_commit_id.go
··· 9 9 // PeelToCommitID peels tags until it reaches a commit object ID. 10 10 func (r *Fetcher) PeelToCommitID(id objectid.ObjectID) (objectid.ObjectID, error) { 11 11 for { 12 - ty, _, err := r.store.ReadHeader(id) 12 + ty, _, err := r.Header(id) 13 13 if err != nil { 14 - return objectid.ObjectID{}, wrapObjectReadError(id, err) 14 + return objectid.ObjectID{}, err 15 15 } 16 16 17 17 switch ty {
-22
object/fetch/peel_to_commit_reader.go
··· 1 - package fetch 2 - 3 - import ( 4 - "io" 5 - 6 - objectid "codeberg.org/lindenii/furgit/object/id" 7 - ) 8 - 9 - // PeelToCommitReader returns a reader for the content of the peeled commit at 10 - // id, together with its content size in bytes. 11 - // 12 - // Usage of this method is unusual. 13 - // 14 - // Labels: Life-Parent, Close-Caller. 15 - func (r *Fetcher) PeelToCommitReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { 16 - commitID, err := r.PeelToCommitID(id) 17 - if err != nil { 18 - return nil, 0, err 19 - } 20 - 21 - return r.ExactCommitReader(commitID) 22 - }
+2 -2
object/fetch/peel_to_tree_id.go
··· 10 10 // root tree object ID is then returned. 11 11 func (r *Fetcher) PeelToTreeID(id objectid.ObjectID) (objectid.ObjectID, error) { 12 12 for { 13 - ty, _, err := r.store.ReadHeader(id) 13 + ty, _, err := r.Header(id) 14 14 if err != nil { 15 - return objectid.ObjectID{}, wrapObjectReadError(id, err) 15 + return objectid.ObjectID{}, err 16 16 } 17 17 18 18 switch ty {
-22
object/fetch/peel_to_tree_reader.go
··· 1 - package fetch 2 - 3 - import ( 4 - "io" 5 - 6 - objectid "codeberg.org/lindenii/furgit/object/id" 7 - ) 8 - 9 - // PeelToTreeReader returns a reader for the content of the peeled tree at id, 10 - // together with its content size in bytes. 11 - // 12 - // Usage of this method is unusual. 13 - // 14 - // Labels: Life-Parent, Close-Caller. 15 - func (r *Fetcher) PeelToTreeReader(id objectid.ObjectID) (io.ReadCloser, int64, error) { 16 - treeID, err := r.PeelToTreeID(id) 17 - if err != nil { 18 - return nil, 0, err 19 - } 20 - 21 - return r.ExactTreeReader(treeID) 22 - }
+10
object/fetch/size.go
··· 1 + package fetch 2 + 3 + import objectid "codeberg.org/lindenii/furgit/object/id" 4 + 5 + // Size returns the object content size at id. 6 + // 7 + // Labels: Life-Parent. 8 + func (r *Fetcher) Size(id objectid.ObjectID) (int64, error) { 9 + return r.store.ReadSize(id) 10 + }
+1 -6
object/fetch/treefs_entry.go
··· 69 69 } 70 70 71 71 func (entry treeEntryValue) blobSize(fetcher *Fetcher) (int64, error) { 72 - _, size, err := fetcher.store.ReadHeader(entry.objectID) 73 - if err != nil { 74 - return 0, err 75 - } 76 - 77 - return size, nil 72 + return fetcher.Size(entry.objectID) 78 73 } 79 74 80 75 func (entry treeEntryValue) subtreeID() (objectid.ObjectID, error) {