aboutsummaryrefslogtreecommitdiff
path: root/internal/engine/apply.go
diff options
context:
space:
mode:
authorLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 21:46:08 +0200
committerLukasz Kasprzak <lukas@labunix.xyz>2026-09-14 21:46:08 +0200
commit49ea29a66254cc23265025a912a73c3e5b0c6ae5 (patch)
treead2a9003da778add4565c46a6641a3987d4a7ce2 /internal/engine/apply.go
parentc497d173b24b1b8247fac9e996e5c0fe690c1769 (diff)
downloadkrino-49ea29a66254cc23265025a912a73c3e5b0c6ae5.tar.gz
krino-49ea29a66254cc23265025a912a73c3e5b0c6ae5.zip
plan 9: property test compares directories and refuses to pass vacuously; undo tracks directories trash restores recreate
Diffstat (limited to 'internal/engine/apply.go')
-rw-r--r--internal/engine/apply.go11
1 files changed, 9 insertions, 2 deletions
diff --git a/internal/engine/apply.go b/internal/engine/apply.go
index e109aaf..09f3aab 100644
--- a/internal/engine/apply.go
+++ b/internal/engine/apply.go
@@ -1006,12 +1006,19 @@ func runUndoStep(step UndoStep) apply.StepResult {
// put it explicitly (fix round 1, item 3) - never re-derived from
// Src or Dst's shape, which belong to internal/apply's and this
// file's own conventions and must stay free to change independently.
+ // The directory the file goes back into is created here, tracked,
+ // rather than silently by trash.Restore, so ApplyUndo removes it again
+ // when it ends up empty (review undo F6).
+ made, err := apply.MkdirAllTracked(filepath.Dir(step.Dst))
+ if err != nil {
+ return apply.StepResult{Status: "failed", Detail: err.Error(), Made: made}
+ }
restored, err := trash.Restore(step.Original.Detail)
if err != nil {
- return apply.StepResult{Status: "failed", Detail: err.Error()}
+ return apply.StepResult{Status: "failed", Detail: err.Error(), Made: made}
}
size, mtime := statSizeModTime(restored)
- return apply.StepResult{Status: "ok", Dst: restored, Size: size, ModTime: mtime}
+ return apply.StepResult{Status: "ok", Dst: restored, Size: size, ModTime: mtime, Made: made}
case "undo-mkdir":
if err := os.Remove(step.Src); err != nil {