aboutsummaryrefslogtreecommitdiff
path: root/repository
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-24 06:10:36 +0000
committerGravatar Runxi Yu2026-03-24 06:10:36 +0000
commita454068d748a363833df3a2219ac278bcaf4c39b (patch)
tree43a8c0046d02b81688b068b1eda43913e6a81d20 /repository
parentTODO: Remove that broken line (diff)
signatureNo signature
repository: Clarify ownership
Diffstat (limited to 'repository')
-rw-r--r--repository/objects.go4
-rw-r--r--repository/refs.go4
-rw-r--r--repository/repository.go4
-rw-r--r--repository/resolver.go4
-rw-r--r--repository/write_loose.go5
5 files changed, 19 insertions, 2 deletions
diff --git a/repository/objects.go b/repository/objects.go
index b7ca2094..965a9f68 100644
--- a/repository/objects.go
+++ b/repository/objects.go
@@ -68,6 +68,10 @@ func openObjectStore(
// Objects returns the configured object store.
//
+// The returned store is owned by Repository and borrows repository-managed
+// resources. Callers must not close it directly, and it must not be used after
+// Close.
+//
//nolint:ireturn
func (repo *Repository) Objects() objectstore.Store {
return repo.objects
diff --git a/repository/refs.go b/repository/refs.go
index a3e2cfb8..83afe047 100644
--- a/repository/refs.go
+++ b/repository/refs.go
@@ -4,6 +4,10 @@ import "codeberg.org/lindenii/furgit/refstore"
// Refs returns the configured ref store.
//
+// The returned store is owned by Repository and borrows repository-managed
+// resources. Callers must not close it directly, and it must not be used after
+// Close.
+//
//nolint:ireturn
func (repo *Repository) Refs() refstore.ReadWriteStore {
return repo.refs
diff --git a/repository/repository.go b/repository/repository.go
index c56827cd..376c9bd7 100644
--- a/repository/repository.go
+++ b/repository/repository.go
@@ -16,6 +16,10 @@ import (
//
// Open expects a root for the Git directory itself:
// a bare repository root or a non-bare ".git" directory.
+//
+// Accessors such as Objects, Refs, Resolver, and LooseStoreForWriting return
+// views backed by resources owned by Repository. Those values borrow the
+// repository's stores and filesystem roots and must not be used after Close.
type Repository struct {
config *config.Config
algo objectid.Algorithm
diff --git a/repository/resolver.go b/repository/resolver.go
index faeb8837..ed87fa09 100644
--- a/repository/resolver.go
+++ b/repository/resolver.go
@@ -4,8 +4,8 @@ import "codeberg.org/lindenii/furgit/object/resolve"
// Resolver returns an object resolver backed by the repository's object store.
//
-// The returned resolver is ready for use and does not take ownership of the
-// repository or its underlying object store.
+// The returned resolver is ready for use, borrows the repository's object
+// store, does not need closing, and must not be used after Close.
func (repo *Repository) Resolver() *resolve.Resolver {
return resolve.New(repo.objects)
}
diff --git a/repository/write_loose.go b/repository/write_loose.go
index bd8d7f57..db57c9c6 100644
--- a/repository/write_loose.go
+++ b/repository/write_loose.go
@@ -4,6 +4,11 @@ import (
objectloose "codeberg.org/lindenii/furgit/objectstore/loose"
)
+// LooseStoreForWriting returns the repository's loose-object writer.
+//
+// The returned store is owned by Repository and borrows repository-managed
+// resources. Callers must not close it directly, and it must not be used after
+// Close.
func (repo *Repository) LooseStoreForWriting() *objectloose.Store {
return repo.objectsLoose
}