Fix for a regression in the ZFS, LVM, and Btrfs hooks in which partial excludes of snapshot paths were ignored (#1169).

This commit is contained in:
Dan Helfman
2025-10-26 14:12:52 -07:00
parent 51d2ce7963
commit 0f7ebcb4b7
11 changed files with 212 additions and 12 deletions
@@ -5,11 +5,22 @@ from borgmatic.hooks.data_source import btrfs as module
def test_dump_data_sources_snapshots_each_subvolume_and_updates_patterns():
patterns = [Pattern('/foo'), Pattern('/mnt/subvol1'), Pattern('/mnt/subvol2')]
patterns = [
Pattern('/foo'),
Pattern('/mnt/subvol1'),
Pattern('/mnt/subvol1/.cache', Pattern_type.EXCLUDE),
Pattern('/mnt/subvol2'),
]
config = {'btrfs': {}}
flexmock(module).should_receive('get_subvolumes').and_return(
(
module.Subvolume('/mnt/subvol1', contained_patterns=(Pattern('/mnt/subvol1'),)),
module.Subvolume(
'/mnt/subvol1',
contained_patterns=(
Pattern('/mnt/subvol1'),
Pattern('/mnt/subvol1/.cache', Pattern_type.EXCLUDE),
),
),
module.Subvolume('/mnt/subvol2', contained_patterns=(Pattern('/mnt/subvol2'),)),
),
)
@@ -50,6 +61,7 @@ def test_dump_data_sources_snapshots_each_subvolume_and_updates_patterns():
),
Pattern('/foo'),
Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1'),
Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1/.cache', Pattern_type.EXCLUDE),
Pattern('/mnt/subvol1/.borgmatic-snapshot-1234/./mnt/subvol1', Pattern_type.INCLUDE),
Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2'),
Pattern('/mnt/subvol2/.borgmatic-snapshot-1234/./mnt/subvol2', Pattern_type.INCLUDE),
@@ -6,13 +6,20 @@ from borgmatic.hooks.data_source import lvm as module
def test_dump_data_sources_snapshots_and_mounts_and_updates_patterns():
config = {'lvm': {}}
patterns = [Pattern('/mnt/lvolume1/subdir'), Pattern('/mnt/lvolume2')]
patterns = [
Pattern('/mnt/lvolume1/subdir'),
Pattern('/mnt/lvolume1/subdir/.cache', Pattern_type.EXCLUDE),
Pattern('/mnt/lvolume2'),
]
logical_volumes = (
module.Logical_volume(
name='lvolume1',
device_path='/dev/lvolume1',
mount_point='/mnt/lvolume1',
contained_patterns=(Pattern('/mnt/lvolume1/subdir'),),
contained_patterns=(
Pattern('/mnt/lvolume1/subdir'),
Pattern('/mnt/lvolume1/subdir/.cache', Pattern_type.EXCLUDE),
),
),
module.Logical_volume(
name='lvolume2',
@@ -75,6 +82,9 @@ def test_dump_data_sources_snapshots_and_mounts_and_updates_patterns():
assert patterns == [
Pattern('/run/borgmatic/lvm_snapshots/b33f/./mnt/lvolume1/subdir'),
Pattern(
'/run/borgmatic/lvm_snapshots/b33f/./mnt/lvolume1/subdir/.cache', Pattern_type.EXCLUDE
),
Pattern('/run/borgmatic/lvm_snapshots/b33f/./mnt/lvolume1/subdir', Pattern_type.INCLUDE),
Pattern('/run/borgmatic/lvm_snapshots/b33f/./mnt/lvolume2'),
Pattern('/run/borgmatic/lvm_snapshots/b33f/./mnt/lvolume2', Pattern_type.INCLUDE),