|
1 | 1 | # Changelog |
2 | 2 |
|
| 3 | +## v0.2.9 - 2026-08-02 |
| 4 | + |
| 5 | +- The shim could stop journaling partway through a command with no sign |
| 6 | + that it had, so `undo` reported "nothing to undo" for changes it |
| 7 | + should have caught. Two paths led there. `rmdir` set the reentrancy |
| 8 | + guard on entry but cleared it only on success, so any failed `rmdir` |
| 9 | + (a non-empty directory, a missing one) left the shim deaf for the rest |
| 10 | + of that process: `rmdir a b` with a non-empty `a` was enough to lose |
| 11 | + everything `b` did. Separately, the table that suppresses repeat |
| 12 | + backups of the same file was keyed on nothing, so it survived across |
| 13 | + commands in a process that outlives one. That is exactly the |
| 14 | + `UNDO_CAPTURE_SHELL=1` setup, where the shim lives in the shell |
| 15 | + itself, and a file written in one command went unbacked in every later |
| 16 | + one. The table now resets when the session changes. Fixed by @lai0xn |
| 17 | + in #3; @davised reported the `rmdir` half independently in #6. |
| 18 | +- `undo run -- <cmd>` exited 255 when the command was killed by a |
| 19 | + signal, which is not what the shell it stands in for would report. It |
| 20 | + now exits 128+signal, so a wrapped command interrupted with Ctrl-C |
| 21 | + gives 130 the way the unwrapped one does. |
| 22 | +- Undoing a `RENAME_EXCHANGE` could leave both paths empty. The swap ran |
| 23 | + through a temporary name, and if the middle step failed nothing put |
| 24 | + the first file back: it stayed parked at `<path>.undo-xchg`. Exchanges |
| 25 | + now go through the same helper the file-modification path uses, which |
| 26 | + rolls back on failure and moves the survivor into place when only one |
| 27 | + side is still there. Reported as a cross-device bug by @Arielpetit in |
| 28 | + #4; the kernel only permits an exchange within one filesystem, so the |
| 29 | + missing rollback was the real defect. |
| 30 | + |
3 | 31 | ## v0.2.8 - 2026-07-29 |
4 | 32 |
|
5 | 33 | - Homebrew install instructions pointed at the wrong hook path. The site |
|
0 commit comments