Make dry-run genuinely non-mutating (#23)
* Make dry-run genuinely non-mutating fs.rsync() now takes a real dry_run code path: every mutating call (copy, delete, chmod, chown, utime) is skipped, and a missing dst_dir is never created - the same comparison logic still runs so the yielded actions match what a real run would do. backup.initiate_backup() diffs each source directly against the latest completed snapshot on dry-run, instead of building and discarding a throwaway staging directory with real hardlinks. cleanup_old_backups() no longer creates the repo-id file as a side effect of a dry-run. cli.py skips lock acquisition entirely on dry-run (set_backups_lock() writes PID/timestamp metadata, itself a mutation) and exposes the retention policy via --keep-all/--keep-daily/--keep-weekly/ --keep-monthly/--keep-yearly. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * Address Copilot review: guard restore lock release, reject negative retention values - Guard restore --dry-run's finally block the same way backup's is guarded, for symmetry (release_backups_lock() was already a safe no-op when unheld, but this makes the dry-run contract explicit rather than relying on that implementation detail). - Reject negative --keep-* values via a dedicated argparse type: a negative threshold shifts retention comparisons into the future and can make cleanup treat every existing backup as deletable. - Add a restore --dry-run lock-skip regression test, mirroring the existing backup one. - Fix _snapshot_all_stats() in the new dry-run non-mutation test to also record the backups_dir root's own stat, not just its children. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Maxim Shulga <maxim.shulga@alludo.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
8 files changed
+478
-51
No files matched your search
+4
-4
@@ -147,11 +147,11 @@ Acceptance criteria:
|
||||
|
||||
### Make dry-run genuinely non-mutating
|
||||
|
||||
- [ ] Separate operation planning from execution.
|
||||
- [ ] Ensure dry-run creates no files, hardlinks, locks, metadata updates, or
|
||||
- [x] Separate operation planning from execution.
|
||||
- [x] Ensure dry-run creates no files, hardlinks, locks, metadata updates, or
|
||||
temporary snapshots.
|
||||
- [ ] Print proposed copy, exclusion, and deletion operations.
|
||||
- [ ] Expose validated retention policy through CLI options or configuration.
|
||||
- [x] Print proposed copy, exclusion, and deletion operations.
|
||||
- [x] Expose validated retention policy through CLI options or configuration.
|
||||
|
||||
### Strengthen tests and CI
|
||||
|
||||
|
||||
Reference in new issue
Block a user