shithub: furgit

Download patch

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
--