aboutsummaryrefslogtreecommitdiff
path: root/repository/traversal_test.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-06 21:19:56 +0800
committerGravatar Runxi Yu2026-03-07 00:34:30 +0800
commit01d15bccf3b1dcc51516b1f64d50950b31d7f8fb (patch)
treee491fcc762c67c1ef4ce54faafc5dafdb734ae8a /repository/traversal_test.go
parentobjectstored/refstore: Weird ireturn behavior (diff)
signatureNo signature
Urgh I made some wrong amends and I'm too tired to separate the commits out this time
ancestor: Split out of reachability mergebase: Add merge base routines internal/commitquery: Add commit query context engine thingy internal/peel: Shared tag peeling errors: Shared object query errors internal/testgit: Add rooted repo helpers; remove raw path access objectstore/memory: Add in-memory object store objectid: Add Compare helper
Diffstat (limited to 'repository/traversal_test.go')
-rw-r--r--repository/traversal_test.go76
1 files changed, 51 insertions, 25 deletions
diff --git a/repository/traversal_test.go b/repository/traversal_test.go
index ff3614dc..d5eaabb4 100644
--- a/repository/traversal_test.go
+++ b/repository/traversal_test.go
@@ -31,7 +31,8 @@ func TestRepositoryDepthFirstEnumerationFromHEAD(t *testing.T) {
repoHarness.UpdateRef(t, "refs/heads/main", commit2)
repoHarness.SymbolicRef(t, "HEAD", "refs/heads/main")
- walkRepositoryFromHead(t, repoHarness.Dir())
+ root := repoHarness.OpenGitRoot(t)
+ walkRepositoryFromRoot(t, root, "test repo")
})
}
@@ -39,38 +40,51 @@ func TestRepositoryDepthFirstEnumerationCurrentWorktree(t *testing.T) {
t.Parallel()
worktreeRoot := filepath.Clean("..")
- gitPath := filepath.Join(worktreeRoot, ".git")
- info, err := os.Stat(gitPath)
+ worktreeFS, err := os.OpenRoot(worktreeRoot)
if err != nil {
- t.Fatalf("stat %q: %v", gitPath, err)
+ t.Fatalf("os.OpenRoot(%q): %v", worktreeRoot, err)
+ }
+
+ defer func() { _ = worktreeFS.Close() }()
+
+ info, err := worktreeFS.Stat(".git")
+ if err != nil {
+ t.Fatalf("stat %q: %v", filepath.Join(worktreeRoot, ".git"), err)
}
if info.IsDir() {
- walkRepositoryFromHead(t, gitPath)
+ gitRoot, err := worktreeFS.OpenRoot(".git")
+ if err != nil {
+ t.Fatalf("OpenRoot(.git): %v", err)
+ }
+
+ defer func() { _ = gitRoot.Close() }()
+
+ walkRepositoryFromRoot(t, gitRoot, filepath.Join(worktreeRoot, ".git"))
return
}
if !info.Mode().IsRegular() {
- t.Fatalf("%q is neither a directory nor a regular file", gitPath)
+ t.Fatalf("%q is neither a directory nor a regular file", filepath.Join(worktreeRoot, ".git"))
}
- content, err := os.ReadFile(gitPath) //#nosec G304
+ content, err := worktreeFS.ReadFile(".git")
if err != nil {
- t.Fatalf("read %q: %v", gitPath, err)
+ t.Fatalf("read %q: %v", filepath.Join(worktreeRoot, ".git"), err)
}
line := strings.TrimSpace(string(content))
prefix := "gitdir: "
if !strings.HasPrefix(line, prefix) {
- t.Fatalf("%q file does not begin with %q", gitPath, prefix)
+ t.Fatalf("%q file does not begin with %q", filepath.Join(worktreeRoot, ".git"), prefix)
}
gitdirRel := strings.TrimSpace(line[len(prefix):])
if gitdirRel == "" {
- t.Fatalf("%q contains empty gitdir path", gitPath)
+ t.Fatalf("%q contains empty gitdir path", filepath.Join(worktreeRoot, ".git"))
}
gitdirPath := gitdirRel
@@ -78,42 +92,54 @@ func TestRepositoryDepthFirstEnumerationCurrentWorktree(t *testing.T) {
gitdirPath = filepath.Join(worktreeRoot, gitdirPath)
}
- commondirPath := filepath.Join(gitdirPath, "commondir")
+ gitRoot, err := os.OpenRoot(gitdirPath)
+ if err != nil {
+ t.Fatalf("os.OpenRoot(%q): %v", gitdirPath, err)
+ }
+
+ defer func() { _ = gitRoot.Close() }()
- commondirContent, err := os.ReadFile(commondirPath) //#nosec G304
+ commondirContent, err := gitRoot.ReadFile("commondir")
if err != nil {
- t.Fatalf("read %q: %v", commondirPath, err)
+ t.Fatalf("read %q: %v", filepath.Join(gitdirPath, "commondir"), err)
}
repoPath := strings.TrimSpace(string(commondirContent))
if repoPath == "" {
- t.Fatalf("%q contains empty repo path", commondirPath)
+ t.Fatalf("%q contains empty repo path", filepath.Join(gitdirPath, "commondir"))
}
if filepath.IsAbs(repoPath) {
- walkRepositoryFromHead(t, repoPath)
+ repoRoot, err := os.OpenRoot(repoPath)
+ if err != nil {
+ t.Fatalf("os.OpenRoot(%q): %v", repoPath, err)
+ }
+
+ defer func() { _ = repoRoot.Close() }()
+
+ walkRepositoryFromRoot(t, repoRoot, repoPath)
return
}
repoPath = filepath.Join(gitdirPath, repoPath)
- walkRepositoryFromHead(t, repoPath)
-}
-
-func walkRepositoryFromHead(t *testing.T, repoPath string) {
- t.Helper()
-
- root, err := os.OpenRoot(repoPath)
+ repoRoot, err := os.OpenRoot(repoPath)
if err != nil {
t.Fatalf("os.OpenRoot(%q): %v", repoPath, err)
}
- defer func() { _ = root.Close() }()
+ defer func() { _ = repoRoot.Close() }()
+
+ walkRepositoryFromRoot(t, repoRoot, repoPath)
+}
+
+func walkRepositoryFromRoot(t *testing.T, root *os.Root, label string) {
+ t.Helper()
repo, err := repository.Open(root)
if err != nil {
- t.Fatalf("repository.Open(root for %q): %v", repoPath, err)
+ t.Fatalf("repository.Open(root for %q): %v", label, err)
}
defer func() { _ = repo.Close() }()
@@ -129,7 +155,7 @@ func walkRepositoryFromHead(t *testing.T, repoPath string) {
}
if objectsRead <= 0 {
- t.Fatalf("no objects were enumerated from HEAD (%s)", fmt.Sprintf("%q", repoPath))
+ t.Fatalf("no objects were enumerated from HEAD (%s)", fmt.Sprintf("%q", label))
}
}