fix(cli): honor local installation discovery precedence

This commit is contained in:
2026-08-15 22:29:55 +02:00
parent 66614fe8cf
commit 2c800cc521
4 changed files with 83 additions and 21 deletions
+52 -1
View File
@@ -64,6 +64,44 @@ func TestResolveFindsDeployDescriptorFromNestedDirectory(t *testing.T) {
}
}
func TestResolveUsesLocalCandidateBeforeAncestorCandidate(t *testing.T) {
root := t.TempDir()
writeDiscoverableProject(t, root)
ancestor := writeDiscoverableInstallation(t, root, filepath.Join(root, "deploy", "ancestor"))
localDirectory := filepath.Join(root, "frontend", "feature")
local := writeDiscoverableInstallation(t, root, filepath.Join(localDirectory, "deploy", "local"))
got, err := Resolve("", func(string) string { return "" }, localDirectory)
if err != nil {
t.Fatal(err)
}
want, err := filepath.EvalSymlinks(local)
if err != nil {
t.Fatal(err)
}
if got != want {
t.Fatalf("Resolve() = %q, want local %q before ancestor %q", got, want, ancestor)
}
}
func TestResolveDiscoversDescriptorFromLinkedWorktree(t *testing.T) {
root := t.TempDir()
writeDiscoverableLinkedWorktree(t, root)
want := writeDiscoverableInstallation(t, root, filepath.Join(root, "deploy", "worktree"))
got, err := Resolve("", func(string) string { return "" }, filepath.Join(root, "frontend"))
if err != nil {
t.Fatal(err)
}
canonicalWant, err := filepath.EvalSymlinks(want)
if err != nil {
t.Fatal(err)
}
if got != canonicalWant {
t.Fatalf("Resolve() = %q, want %q from linked worktree", got, canonicalWant)
}
}
func TestResolveIgnoresArtifactsAndRejectsAmbiguousValidCandidates(t *testing.T) {
root := t.TempDir()
writeDiscoverableProject(t, root)
@@ -112,13 +150,26 @@ func TestResolveDoesNotSearchAboveTheDiscoveredProjectRoot(t *testing.T) {
}
func writeDiscoverableProject(t *testing.T, root string) {
writeDiscoverableProjectWithGitMarker(t, root, false)
}
func writeDiscoverableLinkedWorktree(t *testing.T, root string) {
writeDiscoverableProjectWithGitMarker(t, root, true)
}
func writeDiscoverableProjectWithGitMarker(t *testing.T, root string, linkedWorktree bool) {
t.Helper()
for _, path := range []string{"backend", "frontend", "harness", "tools", "deploy"} {
if err := os.MkdirAll(filepath.Join(root, path), 0o755); err != nil {
t.Fatal(err)
}
}
if err := os.MkdirAll(filepath.Join(root, ".git"), 0o755); err != nil {
gitPath := filepath.Join(root, ".git")
if linkedWorktree {
if err := os.WriteFile(gitPath, []byte("gitdir: /tmp/thothii-worktree.git\n"), 0o600); err != nil {
t.Fatal(err)
}
} else if err := os.MkdirAll(gitPath, 0o755); err != nil {
t.Fatal(err)
}
if err := os.WriteFile(filepath.Join(root, "compose.yaml"), []byte("services: {}\n"), 0o600); err != nil {