Preserve literal characters in shared file paths

This commit is contained in:
2026-10-10 14:20:54 +00:00
parent 54cc6baf95
commit c09c7a2ac7
3 changed files with 38 additions and 2 deletions

View File

@@ -231,6 +231,36 @@ func TestReadCandidateTreeDefaultsAreOptionalAndExplicitMissingFilesFail(t *test
}
}
func TestSharedFileSelectionPreservesLiteralBackslash(t *testing.T) {
if filepath.Separator == '\\' {
t.Skip("backslash is a filesystem separator on this platform")
}
repository := newTreeRepository(t)
writeTreeFile(t, repository, "module/go.mod", []byte("module example.com/module\n"))
const name = `docs/notice\copy.txt`
contents := []byte("literal filename\n")
writeTreeFile(t, repository, name, contents)
commit := commitCandidateTree(t, repository)
moduleDir := filepath.Join(repository, "module")
tree, err := ReadCandidateTreeForScope(t.Context(), repository, commit, TreeScope{ModuleDir: moduleDir, SharedFiles: []string{name, name}})
if err != nil {
t.Fatal(err)
}
cleanupCandidateTree(t, tree)
if got := inputPaths(tree); strings.Join(got, "\n") != name+"\nmodule/go.mod" {
t.Fatalf("literal selection = %q", got)
}
read, err := tree.ReadFile(t.Context(), name)
if err != nil || string(read) != string(contents) {
t.Fatalf("literal file content = %q, error = %v", read, err)
}
for _, invalid := range []string{"../outside", "/absolute", "docs"} {
if _, err := ReadCandidateTreeForScope(t.Context(), repository, commit, TreeScope{ModuleDir: moduleDir, SharedFiles: []string{invalid}}); err == nil {
t.Fatalf("shared selection accepted %q", invalid)
}
}
}
func TestRunBuildsInputsOnlyForChecksOrExplicitSharedFiles(t *testing.T) {
repository := newTreeRepository(t)
writeTreeFile(t, repository, "go.mod", []byte("module example.com/validation-tree\n\ngo 1.25.0\n"))