From a3ace84c8b72bb767ab16c702fbd387bf02f4a6c Mon Sep 17 00:00:00 2001 From: Fuxino Date: Wed, 14 Oct 2026 09:40:35 +0200 Subject: [PATCH] Log each old backup as it is removed Removing old backups can take minutes on a slow drive; logging each one with its position (e.g. "(1/3)") shows that the backup is still progressing. --- simple_backup/simple_backup.py | 12 ++++++++++-- tests/test_local.py | 9 +++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/simple_backup/simple_backup.py b/simple_backup/simple_backup.py index de99332..19e69b2 100755 --- a/simple_backup/simple_backup.py +++ b/simple_backup/simple_backup.py @@ -278,7 +278,11 @@ class Backup: logger.info('Removing old backups...') dirs.sort() - for i in range(n_backup - self.keep): + n_remove = n_backup - self.keep + + for i in range(n_remove): + logger.info('Removing backup %s (%d/%d)...', dirs[i], i + 1, n_remove) + if self.remote_sudo: _, _, stderr = self._ssh.exec_command( f'sudo rm -r {shlex.quote(f"{self.output}/simple_backup/{dirs[i]}")}') @@ -317,7 +321,11 @@ class Backup: logger.info('Removing old backups...') dirs.sort() - for i in range(n_backup - self.keep): + n_remove = n_backup - self.keep + + for i in range(n_remove): + logger.info('Removing backup %s (%d/%d)...', dirs[i], i + 1, n_remove) + try: rmtree(f'{self.output}/simple_backup/{dirs[i]}') count += 1 diff --git a/tests/test_local.py b/tests/test_local.py index b4e610e..83a284a 100644 --- a/tests/test_local.py +++ b/tests/test_local.py @@ -140,6 +140,15 @@ class TestRsync: assert backups(out) == remaining + def test_removal_logged(self, src: Path, out: Path, caplog: pytest.LogCaptureFixture) -> None: + for _ in range(3): + assert run_backup(out, [str(src)]) == 0 + + assert run_backup(out, [str(src)], keep=0) == 0 + assert 'Removing backup 2026-10-14_10-00-00 (1/3)...' in caplog.text + assert 'Removing backup 2026-10-14_12-00-00 (3/3)...' in caplog.text + assert 'Removed 3 backups' in caplog.text + def test_remove_before(self, src: Path, out: Path) -> None: assert run_backup(out, [str(src)]) == 0 assert run_backup(out, [str(src)], keep=0, remove_before=True) == 0