aboutsummaryrefslogtreecommitdiff
path: root/repository
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-22 22:07:39 +0000
committerGravatar Runxi Yu2026-03-22 22:07:39 +0000
commit7ddaf1eb2fde11a9e07df0215646c1dca08ccc50 (patch)
treeec1096bd8229fa0a3c3272e2a52e60bff0d73797 /repository
parentobjectstore/loose, receivepack/service, repository: Lint whitespace (diff)
signatureNo signature
refstore, repository: Ownership/lifetimes fix v0.1.87
Diffstat (limited to 'repository')
-rw-r--r--repository/close.go7
-rw-r--r--repository/open.go17
-rw-r--r--repository/refs.go27
-rw-r--r--repository/repository.go1
4 files changed, 24 insertions, 28 deletions
diff --git a/repository/close.go b/repository/close.go
index 2b76cde1..9654918c 100644
--- a/repository/close.go
+++ b/repository/close.go
@@ -49,5 +49,12 @@ func (repo *Repository) Close() error {
}
}
+ if repo.refRoot != nil {
+ err := repo.refRoot.Close()
+ if err != nil {
+ errs = append(errs, err)
+ }
+ }
+
return errors.Join(errs...)
}
diff --git a/repository/open.go b/repository/open.go
index 797da7ad..f7f2dd1c 100644
--- a/repository/open.go
+++ b/repository/open.go
@@ -1,6 +1,11 @@
package repository
-import "os"
+import (
+ "fmt"
+ "os"
+
+ reffiles "codeberg.org/lindenii/furgit/refstore/files"
+)
// Open opens a repository and wires object/ref stores from its on-disk format.
//
@@ -39,12 +44,20 @@ func Open(root *os.Root) (repo *Repository, err error) {
repo.objectsLooseForWritingOnly = objectsLooseForWritingOnly
repo.objectsWriteRoot = objectsWriteRoot
- refs, err := openRefStore(root, algo, detectPackedRefsTimeout(cfg))
+ refRoot, err := root.OpenRoot(".")
if err != nil {
+ return nil, fmt.Errorf("repository: open root for refs: %w", err)
+ }
+
+ refs, err := reffiles.New(refRoot, algo, detectPackedRefsTimeout(cfg))
+ if err != nil {
+ _ = refRoot.Close()
+
return nil, err
}
repo.refs = refs
+ repo.refRoot = refRoot
return repo, nil
}
diff --git a/repository/refs.go b/repository/refs.go
index 0af7c462..a3e2cfb8 100644
--- a/repository/refs.go
+++ b/repository/refs.go
@@ -1,31 +1,6 @@
package repository
-import (
- "fmt"
- "os"
- "time"
-
- "codeberg.org/lindenii/furgit/objectid"
- "codeberg.org/lindenii/furgit/refstore"
- reffiles "codeberg.org/lindenii/furgit/refstore/files"
-)
-
-//nolint:ireturn
-func openRefStore(root *os.Root, algo objectid.Algorithm, packedRefsTimeout time.Duration) (out refstore.ReadWriteStore, err error) {
- refRoot, err := root.OpenRoot(".")
- if err != nil {
- return nil, fmt.Errorf("repository: open root for refs: %w", err)
- }
-
- store, err := reffiles.New(refRoot, algo, packedRefsTimeout)
- if err != nil {
- _ = refRoot.Close()
-
- return nil, err
- }
-
- return store, nil
-}
+import "codeberg.org/lindenii/furgit/refstore"
// Refs returns the configured ref store.
//
diff --git a/repository/repository.go b/repository/repository.go
index 04ca34a8..f9bb2d2b 100644
--- a/repository/repository.go
+++ b/repository/repository.go
@@ -24,5 +24,6 @@ type Repository struct {
objectsPackRoot *os.Root
objectsLooseForWritingOnly *objectloose.Store
objectsWriteRoot *os.Root
+ refRoot *os.Root
refs refstore.ReadWriteStore
}