diff options
| author | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-17 13:58:25 +0200 |
|---|---|---|
| committer | Lukasz Kasprzak <lukas@labunix.xyz> | 2026-09-17 13:58:25 +0200 |
| commit | 9ab6686b98499c745024a474a71e3d99b6e14973 (patch) | |
| tree | 1debf57412d72c6289dd06bd17f0c024a490a3af /cmd/krino | |
| parent | a80d470cbad7335fd5e534f32d935e5a49aadb24 (diff) | |
| download | krino-9ab6686b98499c745024a474a71e3d99b6e14973.tar.gz krino-9ab6686b98499c745024a474a71e3d99b6e14973.zip | |
a chain that deletes itself still gives back the file it displaced
(on-conflict overwrite) trashes the file in the way; ยง7.4 promises undo
restores it. Walking a file's log entries stopped dead at a permanent
delete, so the displace written earlier in the same chain was never
reached: the user's file stayed in the Trash, the refusal named only
the file they did not care about, and krino log called the run undone.
The displaced file is a different file, so it is offered as its own
entry in the undo plan, keyed by its own path - the deleted file stays
refused, since nothing of it can come back, and the copy or move that
preceded the delete stays unreversed too (undoing a copy whose original
was then deleted would destroy the last remaining copy).
The accounting matched: every reversible step of a deleted file was
subtracted, its displace included, so the run read (undone). Only what
genuinely cannot come back is subtracted now.
End to end, the scenario from the review: the only copy of a file is
displaced by an incoming one that is then permanently deleted.
before: archive/ empty, "(undone)", nothing offered
after: archive/a.pdf restored, run reads partly undone
Diffstat (limited to 'cmd/krino')
| -rw-r--r-- | cmd/krino/undo.go | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/cmd/krino/undo.go b/cmd/krino/undo.go index 2d170a4..d21c40e 100644 --- a/cmd/krino/undo.go +++ b/cmd/krino/undo.go @@ -513,7 +513,7 @@ type undoRow struct { func undoRows(files []engine.UndoFile) []undoRow { var rows []undoRow for i, f := range files { - label := display(f.Dir + "/" + f.File) + label := display(f.Label()) if f.Refused != "" { rows = append(rows, undoRow{num: strconv.Itoa(i + 1), file: label, action: "refused: " + display(f.Refused)}) continue |
