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 --- 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 -------------------------------------------- 11 files changed, 70 insertions(+), 70 deletions(-) create mode 100644 object/store/reader.go delete mode 100644 object/store/reading.go (limited to 'object') 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 -} -- cgit v1.3.1-10-gc9f91