From 30bc08762a5aa33b9f47af304d51ef3878752b2f Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Mon, 30 Mar 2026 12:24:49 +0000 Subject: object/store: ReadingStore -> Reader --- cmd/index-pack/run.go | 2 +- format/packfile/ingest/api.go | 2 +- internal/peel/peel.go | 2 +- internal/testgit/repo_open_object_store.go | 2 +- network/receivepack/hook.go | 4 +-- network/receivepack/options.go | 2 +- network/receivepack/service/hook.go | 4 +-- network/receivepack/service/options.go | 2 +- network/receivepack/service/run_hook.go | 2 +- object/blob/blob.go | 2 +- object/fetch/fetcher.go | 4 +-- object/store/chain/chain.go | 2 +- object/store/chain/new.go | 4 +-- object/store/mix/mix.go | 2 +- object/store/mix/mru.go | 8 ++--- object/store/mix/new.go | 4 +-- object/store/mix/refresh.go | 2 +- object/store/packed/store.go | 2 +- object/store/reader.go | 55 ++++++++++++++++++++++++++++++ object/store/reading.go | 55 ------------------------------ reachability/reachability.go | 4 +-- repository/objects.go | 6 ++-- repository/repository.go | 2 +- 23 files changed, 87 insertions(+), 87 deletions(-) create mode 100644 object/store/reader.go delete mode 100644 object/store/reading.go diff --git a/cmd/index-pack/run.go b/cmd/index-pack/run.go index 80e1db25..742548fb 100644 --- a/cmd/index-pack/run.go +++ b/cmd/index-pack/run.go @@ -14,7 +14,7 @@ import ( func run(repoPath, destinationPath, objectFormat string, fixThin, writeRev bool) error { var ( algo objectid.Algorithm - base objectstore.ReadingStore + base objectstore.Reader repo *repository.Repository ) diff --git a/format/packfile/ingest/api.go b/format/packfile/ingest/api.go index 1af3fe0e..03774d6f 100644 --- a/format/packfile/ingest/api.go +++ b/format/packfile/ingest/api.go @@ -19,7 +19,7 @@ type Options struct { // WriteRev writes a .rev alongside the .pack and .idx. WriteRev bool // Base supplies existing objects for thin-pack fixup. - Base objectstore.ReadingStore + Base objectstore.Reader // Progress receives human-readable progress messages. // // When nil, no progress output is emitted. diff --git a/internal/peel/peel.go b/internal/peel/peel.go index 41d84e10..b4af5a5b 100644 --- a/internal/peel/peel.go +++ b/internal/peel/peel.go @@ -12,7 +12,7 @@ import ( ) // ToCommit peels annotated tags transitively until a commit is reached. -func ToCommit(store objectstore.ReadingStore, id objectid.ObjectID) (objectid.ObjectID, error) { +func ToCommit(store objectstore.Reader, id objectid.ObjectID) (objectid.ObjectID, error) { for { ty, _, err := store.ReadHeader(id) if err != nil { diff --git a/internal/testgit/repo_open_object_store.go b/internal/testgit/repo_open_object_store.go index a001d767..42dc370c 100644 --- a/internal/testgit/repo_open_object_store.go +++ b/internal/testgit/repo_open_object_store.go @@ -11,7 +11,7 @@ import ( // the caller. // //nolint:ireturn -func (testRepo *TestRepo) OpenObjectStore(tb testing.TB) objectstore.ReadingStore { +func (testRepo *TestRepo) OpenObjectStore(tb testing.TB) objectstore.Reader { tb.Helper() root := testRepo.OpenGitRoot(tb) diff --git a/network/receivepack/hook.go b/network/receivepack/hook.go index 0dbaef71..cd03dfd0 100644 --- a/network/receivepack/hook.go +++ b/network/receivepack/hook.go @@ -35,8 +35,8 @@ type UpdateDecision struct { // Labels: Life-Call. type HookRequest struct { Refs refstore.ReadingStore - ExistingObjects objectstore.ReadingStore - QuarantinedObjects objectstore.ReadingStore + ExistingObjects objectstore.Reader + QuarantinedObjects objectstore.Reader CommitGraph *commitgraphread.Reader Updates []RefUpdate PushOptions []string diff --git a/network/receivepack/options.go b/network/receivepack/options.go index ca13c623..146d5837 100644 --- a/network/receivepack/options.go +++ b/network/receivepack/options.go @@ -26,7 +26,7 @@ type Options struct { Refs refstore.ReadWriteStore // ExistingObjects is the object store visible to the push before any newly // uploaded quarantined objects are promoted. - ExistingObjects objectstore.ReadingStore + ExistingObjects objectstore.Reader // CommitGraph is an optional commit-graph snapshot corresponding to // ExistingObjects. CommitGraph *commitgraphread.Reader diff --git a/network/receivepack/service/hook.go b/network/receivepack/service/hook.go index 1a116b62..6f472661 100644 --- a/network/receivepack/service/hook.go +++ b/network/receivepack/service/hook.go @@ -31,8 +31,8 @@ type UpdateDecision struct { // Labels: Life-Call. type HookRequest struct { Refs refstore.ReadingStore - ExistingObjects objectstore.ReadingStore - QuarantinedObjects objectstore.ReadingStore + ExistingObjects objectstore.Reader + QuarantinedObjects objectstore.Reader CommitGraph *commitgraphread.Reader Updates []RefUpdate PushOptions []string diff --git a/network/receivepack/service/options.go b/network/receivepack/service/options.go index 82c496c3..05d32c6f 100644 --- a/network/receivepack/service/options.go +++ b/network/receivepack/service/options.go @@ -27,7 +27,7 @@ type PromotedObjectPermissions struct { type Options struct { Algorithm objectid.Algorithm Refs refstore.ReadWriteStore - ExistingObjects objectstore.ReadingStore + ExistingObjects objectstore.Reader CommitGraph *commitgraphread.Reader ObjectsRoot *os.Root Progress iowrap.WriteFlusher diff --git a/network/receivepack/service/run_hook.go b/network/receivepack/service/run_hook.go index a72bc6eb..c3b1a8c7 100644 --- a/network/receivepack/service/run_hook.go +++ b/network/receivepack/service/run_hook.go @@ -40,7 +40,7 @@ func (service *Service) runHook( quarantinedObjects := service.opts.ExistingObjects var ( - quarantineObjectsStore objectstore.ReadingStore + quarantineObjectsStore objectstore.Reader quarantineLooseStore *loose.Store quarantinePackedStore *packed.Store quarantineLooseRoot *os.Root diff --git a/object/blob/blob.go b/object/blob/blob.go index 71c1f6f8..93856c51 100644 --- a/object/blob/blob.go +++ b/object/blob/blob.go @@ -5,7 +5,7 @@ package blob // // Blob is fully materialized in memory. // -// Consider using objectstore.ReadingStore.ReadReaderContent, +// Consider using objectstore.Reader.ReadReaderContent, // or appropriate streaming write APIs. // // Labels: MT-Unsafe. diff --git a/object/fetch/fetcher.go b/object/fetch/fetcher.go index 6bee86a8..36eb808a 100644 --- a/object/fetch/fetcher.go +++ b/object/fetch/fetcher.go @@ -6,12 +6,12 @@ import objectstore "codeberg.org/lindenii/furgit/object/store" // // Labels: MT-Safe. type Fetcher struct { - store objectstore.ReadingStore + store objectstore.Reader } // New returns a Fetcher that reads objects from store. // // Labels: Deps-Borrowed, Life-Parent. -func New(store objectstore.ReadingStore) *Fetcher { +func New(store objectstore.Reader) *Fetcher { return &Fetcher{store: store} } diff --git a/object/store/chain/chain.go b/object/store/chain/chain.go index 9f347e93..218c8abd 100644 --- a/object/store/chain/chain.go +++ b/object/store/chain/chain.go @@ -8,5 +8,5 @@ import objectstore "codeberg.org/lindenii/furgit/object/store" // // Labels: Close-Caller. type Chain struct { - backends []objectstore.ReadingStore + backends []objectstore.Reader } diff --git a/object/store/chain/new.go b/object/store/chain/new.go index 6b20fb4e..dd499d38 100644 --- a/object/store/chain/new.go +++ b/object/store/chain/new.go @@ -7,8 +7,8 @@ import objectstore "codeberg.org/lindenii/furgit/object/store" // The provided backends must be non-nil and distinct. // // Labels: Deps-Borrowed, Life-Parent. -func New(backends ...objectstore.ReadingStore) *Chain { +func New(backends ...objectstore.Reader) *Chain { return &Chain{ - backends: append([]objectstore.ReadingStore(nil), backends...), + backends: append([]objectstore.Reader(nil), backends...), } } diff --git a/object/store/mix/mix.go b/object/store/mix/mix.go index c4b73b9f..65ed97c8 100644 --- a/object/store/mix/mix.go +++ b/object/store/mix/mix.go @@ -16,5 +16,5 @@ type Mix struct { backendHead *backendNode backendTail *backendNode - backendNodeByStore map[objectstore.ReadingStore]*backendNode + backendNodeByStore map[objectstore.Reader]*backendNode } diff --git a/object/store/mix/mru.go b/object/store/mix/mru.go index c8a58d2d..b48f1448 100644 --- a/object/store/mix/mru.go +++ b/object/store/mix/mru.go @@ -3,13 +3,13 @@ package mix import objectstore "codeberg.org/lindenii/furgit/object/store" type backendNode struct { - backend objectstore.ReadingStore + backend objectstore.Reader prev *backendNode next *backendNode } //nolint:ireturn -func (mix *Mix) firstBackend() objectstore.ReadingStore { +func (mix *Mix) firstBackend() objectstore.Reader { mix.mu.RLock() defer mix.mu.RUnlock() @@ -21,7 +21,7 @@ func (mix *Mix) firstBackend() objectstore.ReadingStore { } //nolint:ireturn -func (mix *Mix) nextBackend(current objectstore.ReadingStore) objectstore.ReadingStore { +func (mix *Mix) nextBackend(current objectstore.Reader) objectstore.Reader { mix.mu.RLock() defer mix.mu.RUnlock() @@ -33,7 +33,7 @@ func (mix *Mix) nextBackend(current objectstore.ReadingStore) objectstore.Readin return node.next.backend } -func (mix *Mix) touchBackend(backend objectstore.ReadingStore) { +func (mix *Mix) touchBackend(backend objectstore.Reader) { if backend == nil { return } diff --git a/object/store/mix/new.go b/object/store/mix/new.go index 5653fb54..abc6c8ee 100644 --- a/object/store/mix/new.go +++ b/object/store/mix/new.go @@ -7,8 +7,8 @@ import objectstore "codeberg.org/lindenii/furgit/object/store" // The provided backends must be non-nil and distinct. // // Labels: Deps-Borrowed, Life-Parent. -func New(backends ...objectstore.ReadingStore) *Mix { - nodeByStore := make(map[objectstore.ReadingStore]*backendNode, len(backends)) +func New(backends ...objectstore.Reader) *Mix { + nodeByStore := make(map[objectstore.Reader]*backendNode, len(backends)) var ( head *backendNode diff --git a/object/store/mix/refresh.go b/object/store/mix/refresh.go index eb9c2bf5..bbae6efe 100644 --- a/object/store/mix/refresh.go +++ b/object/store/mix/refresh.go @@ -10,7 +10,7 @@ import ( func (mix *Mix) Refresh() error { mix.mu.RLock() - backends := make([]objectstore.ReadingStore, 0, len(mix.backendNodeByStore)) + backends := make([]objectstore.Reader, 0, len(mix.backendNodeByStore)) for node := mix.backendHead; node != nil; node = node.next { backends = append(backends, node.backend) } diff --git a/object/store/packed/store.go b/object/store/packed/store.go index 2faa8df3..233b3fec 100644 --- a/object/store/packed/store.go +++ b/object/store/packed/store.go @@ -50,4 +50,4 @@ type Store struct { deltaCache *deltaCache } -var _ objectstore.ReadingStore = (*Store)(nil) +var _ objectstore.Reader = (*Store)(nil) diff --git a/object/store/reader.go b/object/store/reader.go new file mode 100644 index 00000000..52a556bd --- /dev/null +++ b/object/store/reader.go @@ -0,0 +1,55 @@ +package objectstore + +import ( + "io" + + objectid "codeberg.org/lindenii/furgit/object/id" + objecttype "codeberg.org/lindenii/furgit/object/type" +) + +// Reader reads Git objects by object ID. +// +// Methods may perform implementation-defined integrity verification beyond +// successfully producing their documented result. +// +// Labels: MT-Safe. +type Reader interface { + // ReadBytesFull reads a full serialized object as "type size\0content". + // + // In a valid repository, hashing this payload with the same algorithm yields + // the requested object ID. Readers should treat this as a repository + // invariant and should not re-verify it on every read. + // + // Labels: Life-Parent. + ReadBytesFull(id objectid.ObjectID) ([]byte, error) + + // ReadBytesContent reads an object's type and content bytes. + // + // Labels: Life-Parent. + ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) + + // ReadReaderFull reads a full serialized object stream as "type size\0content". + // + // Labels: Life-Parent, Close-Caller. + ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) + + // ReadReaderContent reads an object's type, declared content length, + // and content stream. + // + // Labels: Life-Parent, Close-Caller. + ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) + + // ReadSize reads an object's declared content length. + // + // This is equivalent to ReadHeader(...).size and may be cheaper than + // ReadHeader when callers do not need object type. + ReadSize(id objectid.ObjectID) (int64, error) + + // ReadHeader reads an object's type and declared content length. + ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) + + // Refresh updates any backend-local discovery/cache view of on-disk objects. + // + // Backends without dynamic discovery should do nothing and return nil. + Refresh() error +} diff --git a/object/store/reading.go b/object/store/reading.go deleted file mode 100644 index 0e233462..00000000 --- a/object/store/reading.go +++ /dev/null @@ -1,55 +0,0 @@ -package objectstore - -import ( - "io" - - objectid "codeberg.org/lindenii/furgit/object/id" - objecttype "codeberg.org/lindenii/furgit/object/type" -) - -// ReadingStore reads Git objects by object ID. -// -// Methods may perform implementation-defined integrity verification beyond -// successfully producing their documented result. -// -// Labels: MT-Safe. -type ReadingStore interface { - // ReadBytesFull reads a full serialized object as "type size\0content". - // - // In a valid repository, hashing this payload with the same algorithm yields - // the requested object ID. Readers should treat this as a repository - // invariant and should not re-verify it on every read. - // - // Labels: Life-Parent. - ReadBytesFull(id objectid.ObjectID) ([]byte, error) - - // ReadBytesContent reads an object's type and content bytes. - // - // Labels: Life-Parent. - ReadBytesContent(id objectid.ObjectID) (objecttype.Type, []byte, error) - - // ReadReaderFull reads a full serialized object stream as "type size\0content". - // - // Labels: Life-Parent, Close-Caller. - ReadReaderFull(id objectid.ObjectID) (io.ReadCloser, error) - - // ReadReaderContent reads an object's type, declared content length, - // and content stream. - // - // Labels: Life-Parent, Close-Caller. - ReadReaderContent(id objectid.ObjectID) (objecttype.Type, int64, io.ReadCloser, error) - - // ReadSize reads an object's declared content length. - // - // This is equivalent to ReadHeader(...).size and may be cheaper than - // ReadHeader when callers do not need object type. - ReadSize(id objectid.ObjectID) (int64, error) - - // ReadHeader reads an object's type and declared content length. - ReadHeader(id objectid.ObjectID) (objecttype.Type, int64, error) - - // Refresh updates any backend-local discovery/cache view of on-disk objects. - // - // Backends without dynamic discovery should do nothing and return nil. - Refresh() error -} diff --git a/reachability/reachability.go b/reachability/reachability.go index 1f12a698..6a0f2583 100644 --- a/reachability/reachability.go +++ b/reachability/reachability.go @@ -9,7 +9,7 @@ import ( // // Labels: MT-Safe. type Reachability struct { - store objectstore.ReadingStore + store objectstore.Reader graph *commitgraphread.Reader } @@ -17,6 +17,6 @@ type Reachability struct { // commit-graph reader for faster commit-domain traversal. // // Labels: Deps-Borrowed, Life-Parent. -func New(store objectstore.ReadingStore, graph *commitgraphread.Reader) *Reachability { +func New(store objectstore.Reader, graph *commitgraphread.Reader) *Reachability { return &Reachability{store: store, graph: graph} } diff --git a/repository/objects.go b/repository/objects.go index 2e63ad65..81d4ce70 100644 --- a/repository/objects.go +++ b/repository/objects.go @@ -26,7 +26,7 @@ func openObjectStore( root *os.Root, algo objectid.Algorithm, ) ( - objects objectstore.ReadingStore, + objects objectstore.Reader, objectsRoot *os.Root, objectsPackRoot *os.Root, objectsLoose *objectloose.Store, @@ -45,7 +45,7 @@ func openObjectStore( return nil, nil, nil, nil, nil, err } - backends := []objectstore.ReadingStore{objectsLoose} + backends := []objectstore.Reader{objectsLoose} objectsPackRoot, err = objectsRoot.OpenRoot("pack") if err == nil { @@ -84,6 +84,6 @@ func openObjectStore( // Labels: Life-Parent. // //nolint:ireturn -func (repo *Repository) Objects() objectstore.ReadingStore { +func (repo *Repository) Objects() objectstore.Reader { return repo.objects } diff --git a/repository/repository.go b/repository/repository.go index df3075fb..fcf99f56 100644 --- a/repository/repository.go +++ b/repository/repository.go @@ -32,7 +32,7 @@ type Repository struct { config *config.Config algo objectid.Algorithm - objects objectstore.ReadingStore + objects objectstore.Reader fetcher *fetch.Fetcher objectsRoot *os.Root objectsPackRoot *os.Root -- cgit v1.3.1-10-gc9f91