ref: 30bc08762a5aa33b9f47af304d51ef3878752b2f
parent: fb955caaa0d62fc7379469a02ac8f51b17c698c9
author: Runxi Yu <runxiyu@umich.edu>
date: Mon Mar 30 08:24:49 EDT 2026
object/store: ReadingStore -> Reader
--- a/cmd/index-pack/run.go
+++ b/cmd/index-pack/run.go
@@ -14,7 +14,7 @@
func run(repoPath, destinationPath, objectFormat string, fixThin, writeRev bool) error {var (
algo objectid.Algorithm
- base objectstore.ReadingStore
+ base objectstore.Reader
repo *repository.Repository
)
--- a/format/packfile/ingest/api.go
+++ b/format/packfile/ingest/api.go
@@ -19,7 +19,7 @@
// 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.
--- a/internal/peel/peel.go
+++ b/internal/peel/peel.go
@@ -12,7 +12,7 @@
)
// 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 {--- a/internal/testgit/repo_open_object_store.go
+++ b/internal/testgit/repo_open_object_store.go
@@ -11,7 +11,7 @@
// 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)
--- a/network/receivepack/hook.go
+++ b/network/receivepack/hook.go
@@ -35,8 +35,8 @@
// 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
--- a/network/receivepack/options.go
+++ b/network/receivepack/options.go
@@ -26,7 +26,7 @@
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
--- a/network/receivepack/service/hook.go
+++ b/network/receivepack/service/hook.go
@@ -31,8 +31,8 @@
// 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
--- a/network/receivepack/service/options.go
+++ b/network/receivepack/service/options.go
@@ -27,7 +27,7 @@
type Options struct {Algorithm objectid.Algorithm
Refs refstore.ReadWriteStore
- ExistingObjects objectstore.ReadingStore
+ ExistingObjects objectstore.Reader
CommitGraph *commitgraphread.Reader
ObjectsRoot *os.Root
Progress iowrap.WriteFlusher
--- a/network/receivepack/service/run_hook.go
+++ b/network/receivepack/service/run_hook.go
@@ -40,7 +40,7 @@
quarantinedObjects := service.opts.ExistingObjects
var (
- quarantineObjectsStore objectstore.ReadingStore
+ quarantineObjectsStore objectstore.Reader
quarantineLooseStore *loose.Store
quarantinePackedStore *packed.Store
quarantineLooseRoot *os.Root
--- a/object/blob/blob.go
+++ b/object/blob/blob.go
@@ -5,7 +5,7 @@
//
// Blob is fully materialized in memory.
//
-// Consider using objectstore.ReadingStore.ReadReaderContent,
+// Consider using objectstore.Reader.ReadReaderContent,
// or appropriate streaming write APIs.
//
// Labels: MT-Unsafe.
--- a/object/fetch/fetcher.go
+++ b/object/fetch/fetcher.go
@@ -6,12 +6,12 @@
//
// 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}}
--- a/object/store/chain/chain.go
+++ b/object/store/chain/chain.go
@@ -8,5 +8,5 @@
//
// Labels: Close-Caller.
type Chain struct {- backends []objectstore.ReadingStore
+ backends []objectstore.Reader
}
--- a/object/store/chain/new.go
+++ b/object/store/chain/new.go
@@ -7,8 +7,8 @@
// 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...),
}
}
--- a/object/store/mix/mix.go
+++ b/object/store/mix/mix.go
@@ -16,5 +16,5 @@
backendHead *backendNode
backendTail *backendNode
- backendNodeByStore map[objectstore.ReadingStore]*backendNode
+ backendNodeByStore map[objectstore.Reader]*backendNode
}
--- a/object/store/mix/mru.go
+++ b/object/store/mix/mru.go
@@ -3,13 +3,13 @@
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 @@
}
//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 @@
return node.next.backend
}
-func (mix *Mix) touchBackend(backend objectstore.ReadingStore) {+func (mix *Mix) touchBackend(backend objectstore.Reader) { if backend == nil {return
}
--- a/object/store/mix/new.go
+++ b/object/store/mix/new.go
@@ -7,8 +7,8 @@
// 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
--- a/object/store/mix/refresh.go
+++ b/object/store/mix/refresh.go
@@ -10,7 +10,7 @@
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)
}
--- a/object/store/packed/store.go
+++ b/object/store/packed/store.go
@@ -50,4 +50,4 @@
deltaCache *deltaCache
}
-var _ objectstore.ReadingStore = (*Store)(nil)
+var _ objectstore.Reader = (*Store)(nil)
--- /dev/null
+++ b/object/store/reader.go
@@ -1,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
+}
--- a/object/store/reading.go
+++ /dev/null
@@ -1,55 +1,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
-}
--- a/reachability/reachability.go
+++ b/reachability/reachability.go
@@ -9,7 +9,7 @@
//
// Labels: MT-Safe.
type Reachability struct {- store objectstore.ReadingStore
+ store objectstore.Reader
graph *commitgraphread.Reader
}
@@ -17,6 +17,6 @@
// 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}}
--- a/repository/objects.go
+++ b/repository/objects.go
@@ -26,7 +26,7 @@
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 @@
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 @@
// Labels: Life-Parent.
//
//nolint:ireturn
-func (repo *Repository) Objects() objectstore.ReadingStore {+func (repo *Repository) Objects() objectstore.Reader {return repo.objects
}
--- a/repository/repository.go
+++ b/repository/repository.go
@@ -32,7 +32,7 @@
config *config.Config
algo objectid.Algorithm
- objects objectstore.ReadingStore
+ objects objectstore.Reader
fetcher *fetch.Fetcher
objectsRoot *os.Root
objectsPackRoot *os.Root
--
⑨