From 7ed97a870d3d833b24541a512c8da94ecf29a20d Mon Sep 17 00:00:00 2001 From: Andy Arijs Date: Tue, 28 Apr 2026 10:12:02 +0200 Subject: [PATCH] Fix literal backup filename variant grouping --- faststack/io/variants.py | 2 +- faststack/tests/test_variants_logic.py | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/faststack/io/variants.py b/faststack/io/variants.py index af02b7a..8922ef7 100644 --- a/faststack/io/variants.py +++ b/faststack/io/variants.py @@ -17,7 +17,7 @@ ) # Trailing `-backup(\d+)?` token at end of (stripped) stem. -_BACKUP_TRAILING_RE = re.compile(r"(?:^|-)([Bb][Aa][Cc][Kk][Uu][Pp])(\d+)?$") +_BACKUP_TRAILING_RE = re.compile(r"-([Bb][Aa][Cc][Kk][Uu][Pp])(\d+)?$") @dataclass diff --git a/faststack/tests/test_variants_logic.py b/faststack/tests/test_variants_logic.py index 5870a8d..4cabdbe 100644 --- a/faststack/tests/test_variants_logic.py +++ b/faststack/tests/test_variants_logic.py @@ -66,6 +66,17 @@ def test_backup_sorting(self): self.assertEqual(group.backup_paths[2].name, "img-backup2.jpg") self.assertEqual(group.backup_paths[10].name, "img-backup10.jpg") + def test_plain_backup_filename_is_not_variant(self): + """A literal backup.jpg filename should not create an empty group key.""" + groups = build_variant_map([Path("backup.jpg")]) + + self.assertIn("backup", groups) + self.assertNotIn("", groups) + + group = groups["backup"] + self.assertEqual(group.main_path.name, "backup.jpg") + self.assertEqual(group.backup_paths, {}) + def test_developed_backup_handling(self): """Verify developed backups are handled correctly.""" # Policy: developed-backup is "developed" candidate, AND "backup" candidate.