shithub: furgit

Download patch

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