ref: b3028bc65ac03b0bb4a88482519fb45700c675f3
parent: f9f60fcda1e75ddf9ed34ee5997c5cfbe3388e96
author: Runxi Yu <me@runxiyu.org>
date: Wed Mar 4 07:52:26 EST 2026
refstore/packed: Split
--- /dev/null
+++ b/refstore/packed/close.go
@@ -1,0 +1,6 @@
+package packed
+
+// Close releases resources associated with the backend.
+func (store *Store) Close() error {+ return nil
+}
--- /dev/null
+++ b/refstore/packed/list.go
@@ -1,0 +1,39 @@
+package packed
+
+import (
+ "path"
+
+ "codeberg.org/lindenii/furgit/ref"
+)
+
+// List lists packed references matching pattern.
+//
+// Pattern uses path.Match syntax against full reference names.
+// Empty pattern matches all references.
+func (store *Store) List(pattern string) ([]ref.Ref, error) {+ matchAll := pattern == ""
+ if !matchAll {+ _, err := path.Match(pattern, "refs/heads/main")
+ if err != nil {+ return nil, err
+ }
+ }
+
+ refs := make([]ref.Ref, 0, len(store.ordered))
+ for _, entry := range store.ordered {+ if !matchAll {+ matched, err := path.Match(pattern, entry.Name())
+ if err != nil {+ return nil, err
+ }
+
+ if !matched {+ continue
+ }
+ }
+
+ refs = append(refs, entry)
+ }
+
+ return refs, nil
+}
--- /dev/null
+++ b/refstore/packed/new.go
@@ -1,0 +1,33 @@
+package packed
+
+import (
+ "fmt"
+ "os"
+
+ "codeberg.org/lindenii/furgit/objectid"
+)
+
+// New parses packed-refs from one repository root using the given object ID
+// algorithm.
+func New(root *os.Root, algo objectid.Algorithm) (*Store, error) {+ if algo.Size() == 0 {+ return nil, objectid.ErrInvalidAlgorithm
+ }
+
+ packedRefs, err := root.Open("packed-refs")+ if err != nil {+ return nil, fmt.Errorf("refstore/packed: open packed-refs: %w", err)+ }
+
+ defer func() { _ = packedRefs.Close() }()+
+ byName, ordered, err := parsePackedRefs(packedRefs, algo)
+ if err != nil {+ return nil, err
+ }
+
+ return &Store{+ byName: byName,
+ ordered: ordered,
+ }, nil
+}
--- /dev/null
+++ b/refstore/packed/resolve.go
@@ -1,0 +1,28 @@
+package packed
+
+import (
+ "codeberg.org/lindenii/furgit/ref"
+ "codeberg.org/lindenii/furgit/refstore"
+)
+
+// Resolve resolves a packed reference name to a detached ref.
+func (store *Store) Resolve(name string) (ref.Ref, error) {+ detached, ok := store.byName[name]
+ if !ok {+ return nil, refstore.ErrReferenceNotFound
+ }
+
+ return detached, nil
+}
+
+// ResolveFully resolves a packed reference name to a detached ref.
+//
+// Packed refs are detached-only, so ResolveFully is equivalent to Resolve.
+func (store *Store) ResolveFully(name string) (ref.Detached, error) {+ detached, ok := store.byName[name]
+ if !ok {+ return ref.Detached{}, refstore.ErrReferenceNotFound+ }
+
+ return detached, nil
+}
--- /dev/null
+++ b/refstore/packed/shorten.go
@@ -1,0 +1,18 @@
+package packed
+
+import "codeberg.org/lindenii/furgit/refstore"
+
+// Shorten returns the shortest unambiguous shorthand for a packed ref name.
+func (store *Store) Shorten(name string) (string, error) {+ _, ok := store.byName[name]
+ if !ok {+ return "", refstore.ErrReferenceNotFound
+ }
+
+ names := make([]string, 0, len(store.ordered))
+ for _, entry := range store.ordered {+ names = append(names, entry.Name())
+ }
+
+ return refstore.ShortenName(name, names), nil
+}
--- a/refstore/packed/store.go
+++ b/refstore/packed/store.go
@@ -2,11 +2,6 @@
package packed
import (
- "fmt"
- "os"
- "path"
-
- "codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/ref"
"codeberg.org/lindenii/furgit/refstore"
)
@@ -18,102 +13,3 @@
}
var _ refstore.Store = (*Store)(nil)
-
-// New parses packed-refs from one repository root using the given object ID
-// algorithm.
-func New(root *os.Root, algo objectid.Algorithm) (*Store, error) {- if algo.Size() == 0 {- return nil, objectid.ErrInvalidAlgorithm
- }
-
- packedRefs, err := root.Open("packed-refs")- if err != nil {- return nil, fmt.Errorf("refstore/packed: open packed-refs: %w", err)- }
-
- defer func() { _ = packedRefs.Close() }()-
- byName, ordered, err := parsePackedRefs(packedRefs, algo)
- if err != nil {- return nil, err
- }
-
- return &Store{- byName: byName,
- ordered: ordered,
- }, nil
-}
-
-// Resolve resolves a packed reference name to a detached ref.
-func (store *Store) Resolve(name string) (ref.Ref, error) {- detached, ok := store.byName[name]
- if !ok {- return nil, refstore.ErrReferenceNotFound
- }
-
- return detached, nil
-}
-
-// ResolveFully resolves a packed reference name to a detached ref.
-//
-// Packed refs are detached-only, so ResolveFully is equivalent to Resolve.
-func (store *Store) ResolveFully(name string) (ref.Detached, error) {- detached, ok := store.byName[name]
- if !ok {- return ref.Detached{}, refstore.ErrReferenceNotFound- }
-
- return detached, nil
-}
-
-// List lists packed references matching pattern.
-//
-// Pattern uses path.Match syntax against full reference names.
-// Empty pattern matches all references.
-func (store *Store) List(pattern string) ([]ref.Ref, error) {- matchAll := pattern == ""
- if !matchAll {- _, err := path.Match(pattern, "refs/heads/main")
- if err != nil {- return nil, err
- }
- }
-
- refs := make([]ref.Ref, 0, len(store.ordered))
- for _, entry := range store.ordered {- if !matchAll {- matched, err := path.Match(pattern, entry.Name())
- if err != nil {- return nil, err
- }
-
- if !matched {- continue
- }
- }
-
- refs = append(refs, entry)
- }
-
- return refs, nil
-}
-
-// Shorten returns the shortest unambiguous shorthand for a packed ref name.
-func (store *Store) Shorten(name string) (string, error) {- _, ok := store.byName[name]
- if !ok {- return "", refstore.ErrReferenceNotFound
- }
-
- names := make([]string, 0, len(store.ordered))
- for _, entry := range store.ordered {- names = append(names, entry.Name())
- }
-
- return refstore.ShortenName(name, names), nil
-}
-
-// Close releases resources associated with the backend.
-func (store *Store) Close() error {- return nil
-}
--
⑨