diff options
| author | 2026-03-22 22:07:39 +0000 | |
|---|---|---|
| committer | 2026-03-22 22:07:39 +0000 | |
| commit | 7ddaf1eb2fde11a9e07df0215646c1dca08ccc50 (patch) | |
| tree | ec1096bd8229fa0a3c3272e2a52e60bff0d73797 /repository | |
| parent | objectstore/loose, receivepack/service, repository: Lint whitespace (diff) | |
| signature | No signature | |
refstore, repository: Ownership/lifetimes fix v0.1.87
Diffstat (limited to 'repository')
| -rw-r--r-- | repository/close.go | 7 | ||||
| -rw-r--r-- | repository/open.go | 17 | ||||
| -rw-r--r-- | repository/refs.go | 27 | ||||
| -rw-r--r-- | repository/repository.go | 1 |
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 } |
