aboutsummaryrefslogtreecommitdiff
path: root/refstore/shorten_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-02-21 11:33:40 +0800
committerGravatar Runxi Yu2026-02-21 11:33:40 +0800
commit6cdf75c5a9e1f660aa2a86938be680c5db07ffd2 (patch)
treef16f22cc51930e97eaeb73e1e436d8a4c331fabf /refstore/shorten_test.go
parentrefstore/loose: Add loose refs implementation (diff)
signatureNo signature
refstore: Add ref shortening
Diffstat (limited to 'refstore/shorten_test.go')
-rw-r--r--refstore/shorten_test.go68
1 files changed, 68 insertions, 0 deletions
diff --git a/refstore/shorten_test.go b/refstore/shorten_test.go
new file mode 100644
index 00000000..1975ab3f
--- /dev/null
+++ b/refstore/shorten_test.go
@@ -0,0 +1,68 @@
+package refstore_test
+
+import (
+ "testing"
+
+ "codeberg.org/lindenii/furgit/refstore"
+)
+
+func TestShortenName(t *testing.T) {
+ t.Parallel()
+
+ t.Run("simple", func(t *testing.T) {
+ got := refstore.ShortenName("refs/heads/main", []string{"refs/heads/main"})
+ if got != "main" {
+ t.Fatalf("ShortenName simple = %q, want %q", got, "main")
+ }
+ })
+
+ t.Run("ambiguous with tags", func(t *testing.T) {
+ got := refstore.ShortenName(
+ "refs/heads/main",
+ []string{
+ "refs/heads/main",
+ "refs/tags/main",
+ },
+ )
+ if got != "heads/main" {
+ t.Fatalf("ShortenName tags ambiguity = %q, want %q", got, "heads/main")
+ }
+ })
+
+ t.Run("strict remote head ambiguity", func(t *testing.T) {
+ // In strict mode, refs/remotes/%s/HEAD blocks shortening to "%s".
+ got := refstore.ShortenName(
+ "refs/heads/main",
+ []string{
+ "refs/heads/main",
+ "refs/remotes/main/HEAD",
+ },
+ )
+ if got != "heads/main" {
+ t.Fatalf("ShortenName strict ambiguity = %q, want %q", got, "heads/main")
+ }
+ })
+
+ t.Run("deep fallback still shortens", func(t *testing.T) {
+ // refs/remotes/origin/main conflicts with refs/heads/origin/main for
+ // "origin/main", so it should fall back to "remotes/origin/main".
+ got := refstore.ShortenName(
+ "refs/remotes/origin/main",
+ []string{
+ "refs/remotes/origin/main",
+ "refs/heads/origin/main",
+ },
+ )
+ if got != "remotes/origin/main" {
+ t.Fatalf("ShortenName deep fallback = %q, want %q", got, "remotes/origin/main")
+ }
+ })
+
+ t.Run("refs-prefix fallback", func(t *testing.T) {
+ name := "refs/notes/review/topic"
+ got := refstore.ShortenName(name, []string{name})
+ if got != "notes/review/topic" {
+ t.Fatalf("ShortenName refs-prefix fallback = %q, want %q", got, "notes/review/topic")
+ }
+ })
+}