diff options
| author | 2026-03-06 21:19:56 +0800 | |
|---|---|---|
| committer | 2026-03-07 00:34:30 +0800 | |
| commit | 01d15bccf3b1dcc51516b1f64d50950b31d7f8fb (patch) | |
| tree | e491fcc762c67c1ef4ce54faafc5dafdb734ae8a /repository/traversal_test.go | |
| parent | objectstored/refstore: Weird ireturn behavior (diff) | |
| signature | No 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.go | 76 |
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)) } } |
