Verify record storage preserves whitespace in Git paths
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
@@ -172,6 +173,47 @@ func TestSaveEvidenceAllowsExplicitGitMetadataStores(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestRecordStoragePreservesWhitespaceInRepositoryAndMetadataPaths(t *testing.T) {
|
||||
for _, separate := range []bool{false, true} {
|
||||
t.Run(fmt.Sprintf("separate=%t", separate), func(t *testing.T) {
|
||||
original := recordRepo(t)
|
||||
repo := original + " "
|
||||
if err := os.Rename(original, repo); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
// recordRepo's temporary-directory cleanup owns the old spelling.
|
||||
t.Cleanup(func() { _ = os.RemoveAll(repo) })
|
||||
if separate {
|
||||
recordGit(t, repo, "init", "--separate-git-dir", filepath.Join(t.TempDir(), "metadata "))
|
||||
}
|
||||
if err := os.WriteFile(filepath.Join(repo, ".gitignore"), []byte("saved/\n"), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
recordGit(t, repo, "add", ".gitignore")
|
||||
recordGit(t, repo, "commit", "-qm", "Ignore saved records")
|
||||
for _, override := range []string{"", "saved"} {
|
||||
path, err := SaveEvidence(t.Context(), repo, override, Evidence{RepositoryDir: repo, Tag: "v1.2.3"})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
listed, err := ListAttempts(t.Context(), repo, override)
|
||||
if err != nil || len(listed.Attempts) != 1 || listed.Attempts[0].RecordPath != path || listed.Attempts[0].Evidence.RepositoryDir != repo {
|
||||
t.Fatalf("read/write disagreement for %q: %#v, %v", override, listed, err)
|
||||
}
|
||||
if override != "" && filepath.Dir(path) != filepath.Join(repo, override) {
|
||||
t.Fatalf("changed repository path: %q", path)
|
||||
}
|
||||
}
|
||||
if _, err := SaveEvidence(t.Context(), repo, filepath.Join(repo, "unignored"), Evidence{}); err == nil {
|
||||
t.Fatal("absolute unignored store was misclassified as external")
|
||||
}
|
||||
if status := recordGit(t, repo, "status", "--porcelain"); status != "" {
|
||||
t.Fatalf("recording changed candidate: %s", status)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSaveEvidenceRejectsUnignoredOverrideInsideWorktree(t *testing.T) {
|
||||
repo := recordRepo(t)
|
||||
_, err := SaveEvidence(t.Context(), repo, "records", Evidence{Tag: "v1.2.3"})
|
||||
|
||||
Reference in New Issue
Block a user