aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-06 00:47:53 +0800
committerGravatar Runxi Yu2026-03-06 00:47:53 +0800
commitdff530bd93b9b7200d5d492b4ccb86c17daadf21 (patch)
tree970f9ceac5c71daa7f25a1ae59150bac5944ff10
parentrepository: Delete passthrough convenience functions (diff)
signatureNo signature
repository: Remove refs passthrough functions
-rw-r--r--repository/refs.go25
-rw-r--r--repository/refs_test.go206
-rw-r--r--repository/traversal_bench_test.go2
-rw-r--r--repository/traversal_test.go2
4 files changed, 2 insertions, 233 deletions
diff --git a/repository/refs.go b/repository/refs.go
deleted file mode 100644
index 1eaf5c97..00000000
--- a/repository/refs.go
+++ /dev/null
@@ -1,25 +0,0 @@
-package repository
-
-import (
- "codeberg.org/lindenii/furgit/ref"
-)
-
-// ResolveRef resolves one reference name to symbolic or detached form.
-func (repo *Repository) ResolveRef(name string) (ref.Ref, error) {
- return repo.refs.Resolve(name)
-}
-
-// ResolveRefFully resolves one reference name to detached form.
-func (repo *Repository) ResolveRefFully(name string) (ref.Detached, error) {
- return repo.refs.ResolveFully(name)
-}
-
-// ListRefs lists references matching pattern.
-func (repo *Repository) ListRefs(pattern string) ([]ref.Ref, error) {
- return repo.refs.List(pattern)
-}
-
-// ShortenRef returns the shortest unambiguous shorthand for a full reference name.
-func (repo *Repository) ShortenRef(name string) (string, error) {
- return repo.refs.Shorten(name)
-}
diff --git a/repository/refs_test.go b/repository/refs_test.go
deleted file mode 100644
index 68f01898..00000000
--- a/repository/refs_test.go
+++ /dev/null
@@ -1,206 +0,0 @@
-package repository_test
-
-import (
- "os"
- "strings"
- "testing"
-
- "codeberg.org/lindenii/furgit/internal/testgit"
- "codeberg.org/lindenii/furgit/objectid"
- "codeberg.org/lindenii/furgit/ref"
- "codeberg.org/lindenii/furgit/repository"
-)
-
-func TestRefConvenienceMethods(t *testing.T) {
- t.Parallel()
-
- testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper
- repoHarness := testgit.NewRepo(t, testgit.RepoOptions{
- ObjectFormat: algo,
- Bare: true,
- RefFormat: "files",
- })
-
- _, _, commitID := repoHarness.MakeCommit(t, "refs wrappers")
- repoHarness.UpdateRef(t, "refs/heads/main", commitID)
- repoHarness.SymbolicRef(t, "HEAD", "refs/heads/main")
- repoHarness.UpdateRef(t, "refs/tags/v1", commitID)
-
- root, err := os.OpenRoot(repoHarness.Dir())
- if err != nil {
- t.Fatalf("os.OpenRoot: %v", err)
- }
-
- defer func() { _ = root.Close() }()
-
- repo, err := repository.Open(root)
- if err != nil {
- t.Fatalf("repository.Open: %v", err)
- }
-
- defer func() { _ = repo.Close() }()
-
- resolved, err := repo.ResolveRef("HEAD")
- if err != nil {
- t.Fatalf("ResolveRef(HEAD): %v", err)
- }
-
- sym, ok := resolved.(ref.Symbolic)
- if !ok {
- t.Fatalf("ResolveRef(HEAD) type = %T, want ref.Symbolic", resolved)
- }
-
- if sym.Target != "refs/heads/main" {
- t.Fatalf("ResolveRef(HEAD) target = %q, want %q", sym.Target, "refs/heads/main")
- }
-
- fully, err := repo.ResolveRefFully("HEAD")
- if err != nil {
- t.Fatalf("ResolveRefFully(HEAD): %v", err)
- }
-
- if fully.ID != commitID {
- t.Fatalf("ResolveRefFully(HEAD) id = %s, want %s", fully.ID, commitID)
- }
-
- refs, err := repo.ListRefs("refs/*/*")
- if err != nil {
- t.Fatalf("ListRefs: %v", err)
- }
-
- if len(refs) < 2 {
- t.Fatalf("ListRefs returned %d refs, want >= 2", len(refs))
- }
-
- short, err := repo.ShortenRef("refs/heads/main")
- if err != nil {
- t.Fatalf("ShortenRef: %v", err)
- }
-
- if short != "heads/main" && short != "main" {
- t.Fatalf("ShortenRef = %q, want %q or %q", short, "heads/main", "main")
- }
- })
-}
-
-func TestResolveRefErrorSurface(t *testing.T) {
- t.Parallel()
-
- testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper
- repoHarness := testgit.NewRepo(t, testgit.RepoOptions{
- ObjectFormat: algo,
- Bare: true,
- RefFormat: "files",
- })
-
- root, err := os.OpenRoot(repoHarness.Dir())
- if err != nil {
- t.Fatalf("os.OpenRoot: %v", err)
- }
-
- defer func() { _ = root.Close() }()
-
- repo, err := repository.Open(root)
- if err != nil {
- t.Fatalf("repository.Open: %v", err)
- }
-
- defer func() { _ = repo.Close() }()
-
- _, err = repo.ResolveRef("refs/heads/does-not-exist")
- if err == nil {
- t.Fatalf("ResolveRef missing: expected error")
- }
-
- if !strings.Contains(err.Error(), "not found") {
- t.Fatalf("ResolveRef missing error = %v, want not found detail", err)
- }
- })
-}
-
-func TestListRefsLooseOverridesPacked(t *testing.T) {
- t.Parallel()
-
- testgit.ForEachAlgorithm(t, func(t *testing.T, algo objectid.Algorithm) { //nolint:thelper
- repoHarness := testgit.NewRepo(t, testgit.RepoOptions{
- ObjectFormat: algo,
- Bare: true,
- RefFormat: "files",
- })
-
- repoHarness.SymbolicRef(t, "HEAD", "refs/heads/main")
- _, _, commit1 := repoHarness.MakeCommit(t, "commit-one")
- repoHarness.UpdateRef(t, "refs/heads/main", commit1)
- repoHarness.UpdateRef(t, "refs/heads/feature", commit1)
- repoHarness.PackRefs(t, "--all", "--prune")
-
- _, _, commit2 := repoHarness.MakeCommit(t, "commit-two")
- repoHarness.UpdateRef(t, "refs/heads/main", commit2)
-
- root, err := os.OpenRoot(repoHarness.Dir())
- if err != nil {
- t.Fatalf("os.OpenRoot: %v", err)
- }
-
- defer func() { _ = root.Close() }()
-
- repo, err := repository.Open(root)
- if err != nil {
- t.Fatalf("repository.Open: %v", err)
- }
-
- defer func() { _ = repo.Close() }()
-
- mainRef, err := repo.ResolveRefFully("refs/heads/main")
- if err != nil {
- t.Fatalf("ResolveRefFully(main): %v", err)
- }
-
- if mainRef.ID != commit2 {
- t.Fatalf("ResolveRefFully(main) id = %s, want %s", mainRef.ID, commit2)
- }
-
- refs, err := repo.ListRefs("refs/heads/*")
- if err != nil {
- t.Fatalf("ListRefs(refs/heads/*): %v", err)
- }
-
- byName := make(map[string]ref.Ref, len(refs))
- for _, entry := range refs {
- name := entry.Name()
- if _, exists := byName[name]; exists {
- t.Fatalf("duplicate ref %q in ListRefs output", name)
- }
-
- byName[name] = entry
- }
-
- main, ok := byName["refs/heads/main"]
- if !ok {
- t.Fatalf("missing refs/heads/main in ListRefs output")
- }
-
- mainDetached, ok := main.(ref.Detached)
- if !ok {
- t.Fatalf("refs/heads/main type = %T, want ref.Detached", main)
- }
-
- if mainDetached.ID != commit2 {
- t.Fatalf("refs/heads/main id = %s, want %s", mainDetached.ID, commit2)
- }
-
- feature, ok := byName["refs/heads/feature"]
- if !ok {
- t.Fatalf("missing refs/heads/feature in ListRefs output")
- }
-
- featureDetached, ok := feature.(ref.Detached)
- if !ok {
- t.Fatalf("refs/heads/feature type = %T, want ref.Detached", feature)
- }
-
- if featureDetached.ID != commit1 {
- t.Fatalf("refs/heads/feature id = %s, want %s", featureDetached.ID, commit1)
- }
- })
-}
diff --git a/repository/traversal_bench_test.go b/repository/traversal_bench_test.go
index 3480964e..ada0f8d8 100644
--- a/repository/traversal_bench_test.go
+++ b/repository/traversal_bench_test.go
@@ -39,7 +39,7 @@ func BenchmarkTraverseHeadTree(b *testing.B) {
_ = repo.Close()
})
- head, err := repo.ResolveRefFully("HEAD")
+ head, err := repo.Refs().ResolveFully("HEAD")
if err != nil {
b.Fatalf("ResolveRefFully(HEAD): %v", err)
}
diff --git a/repository/traversal_test.go b/repository/traversal_test.go
index 34c3a75b..47300e7f 100644
--- a/repository/traversal_test.go
+++ b/repository/traversal_test.go
@@ -117,7 +117,7 @@ func walkRepositoryFromHead(t *testing.T, repoPath string) {
defer func() { _ = repo.Close() }()
- head, err := repo.ResolveRefFully("HEAD")
+ head, err := repo.Refs().ResolveFully("HEAD")
if err != nil {
t.Fatalf("ResolveRefFully(HEAD): %v", err)
}