Honor cancellation throughout publication recovery Git operations
This commit is contained in:
@@ -74,11 +74,11 @@ func TestSaveEvidenceUsesPrivateUniqueRecordsAndLinkedWorktreeMetadata(t *testin
|
||||
worktree := filepath.Join(t.TempDir(), "linked")
|
||||
recordGit(t, repo, "worktree", "add", "--detach", worktree)
|
||||
evidence := Evidence{Tag: "v1.2.3", Endpoint: "https://user:secret@example.invalid/repo.git"}
|
||||
first, err := SaveEvidence(worktree, "", evidence)
|
||||
first, err := SaveEvidence(t.Context(), worktree, "", evidence)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, err := SaveEvidence(worktree, "", evidence)
|
||||
second, err := SaveEvidence(t.Context(), worktree, "", evidence)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@@ -129,14 +129,14 @@ func TestSaveEvidenceResolvesRelativeAndIgnoredOverrides(t *testing.T) {
|
||||
if err := os.WriteFile(filepath.Join(repo, ".gitignore"), []byte("saved-records/\n"), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := SaveEvidence(repo, "saved-records", Evidence{Tag: "v1.2.3"}); err != nil {
|
||||
if _, err := SaveEvidence(t.Context(), repo, "saved-records", Evidence{Tag: "v1.2.3"}); err != nil {
|
||||
t.Fatalf("ignored override: %v", err)
|
||||
}
|
||||
if _, err := os.Stat(filepath.Join(repo, "saved-records")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
external := filepath.Join(t.TempDir(), "external-store")
|
||||
path, err := SaveEvidence(repo, external, Evidence{Tag: "v2.0.0"})
|
||||
path, err := SaveEvidence(t.Context(), repo, external, Evidence{Tag: "v2.0.0"})
|
||||
if err != nil || !strings.HasPrefix(path, external+string(filepath.Separator)) {
|
||||
t.Fatalf("absolute external override path=%q error=%v", path, err)
|
||||
}
|
||||
@@ -154,13 +154,13 @@ func TestSaveEvidenceAllowsExplicitGitMetadataStores(t *testing.T) {
|
||||
case "separate":
|
||||
recordGit(t, repo, "init", "--separate-git-dir", filepath.Join(t.TempDir(), "metadata"))
|
||||
}
|
||||
defaultPath, err := SaveEvidence(repo, "", Evidence{})
|
||||
defaultPath, err := SaveEvidence(t.Context(), repo, "", Evidence{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
privateDir := strings.TrimSuffix(recordGit(t, repo, "rev-parse", "--absolute-git-dir"), "\n")
|
||||
for _, directory := range []string{filepath.Dir(defaultPath), filepath.Join(privateDir, "other-private-records")} {
|
||||
path, err := SaveEvidence(repo, directory, Evidence{Tag: "v1.2.3"})
|
||||
path, err := SaveEvidence(t.Context(), repo, directory, Evidence{Tag: "v1.2.3"})
|
||||
if err != nil || filepath.Dir(path) != directory {
|
||||
t.Fatalf("explicit metadata store %q = %q, %v", directory, path, err)
|
||||
}
|
||||
@@ -174,7 +174,7 @@ func TestSaveEvidenceAllowsExplicitGitMetadataStores(t *testing.T) {
|
||||
|
||||
func TestSaveEvidenceRejectsUnignoredOverrideInsideWorktree(t *testing.T) {
|
||||
repo := recordRepo(t)
|
||||
_, err := SaveEvidence(repo, "records", Evidence{Tag: "v1.2.3"})
|
||||
_, err := SaveEvidence(t.Context(), repo, "records", Evidence{Tag: "v1.2.3"})
|
||||
var recovery *RecoveryError
|
||||
if !errors.As(err, &recovery) || recovery.Kind != "record_write" {
|
||||
t.Fatalf("SaveEvidence() error=%v", err)
|
||||
@@ -198,14 +198,14 @@ func TestSaveEvidenceChecksEachActualFilename(t *testing.T) {
|
||||
next := func(name string) func(string) (string, error) {
|
||||
return func(directory string) (string, error) { return filepath.Join(directory, name), nil }
|
||||
}
|
||||
path, err := saveEvidenceNamed(repo, repo, dir, dir, Evidence{Tag: "v1.0.0"}, next("attempt-0.json"))
|
||||
path, err := saveEvidenceNamed(t.Context(), repo, repo, dir, dir, Evidence{Tag: "v1.0.0"}, next("attempt-0.json"))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
recordGit(t, repo, "check-ignore", "--", path)
|
||||
// A collision must validate the replacement name as well.
|
||||
calls := 0
|
||||
_, err = saveEvidenceNamed(repo, repo, dir, dir, Evidence{Tag: "v2.0.0"}, func(directory string) (string, error) {
|
||||
_, err = saveEvidenceNamed(t.Context(), repo, repo, dir, dir, Evidence{Tag: "v2.0.0"}, func(directory string) (string, error) {
|
||||
calls++
|
||||
name := "attempt-0.json"
|
||||
if calls > 1 {
|
||||
@@ -234,8 +234,8 @@ func TestListAttemptsReturnsReadableRecordsAndDiagnosticsInPathOrder(t *testing.
|
||||
if err := os.Mkdir(directory, 0700); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
second, _ := SaveEvidence(repo, directory, Evidence{Tag: "v2.0.0"})
|
||||
first, _ := SaveEvidence(repo, directory, Evidence{Tag: "v1.0.0"})
|
||||
second, _ := SaveEvidence(t.Context(), repo, directory, Evidence{Tag: "v2.0.0"})
|
||||
first, _ := SaveEvidence(t.Context(), repo, directory, Evidence{Tag: "v1.0.0"})
|
||||
if err := os.WriteFile(filepath.Join(directory, "broken.json"), []byte("{"), 0600); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user