Don't unmount directories that don't exist.

This commit is contained in:
Dan Helfman 2024-11-21 22:16:05 -08:00
parent 06e0f98fd8
commit 5cec2bf3d9

View File

@ -53,7 +53,7 @@ def get_datasets_to_backup(zfs_command, source_directories):
)
def get_all_datasets(zfs_command):
def get_all_datasets(zfs_command):
'''
Given a ZFS command to run, return all ZFS datasets as a sequence of (dataset name, mount point)
pairs.
@ -163,7 +163,9 @@ def dump_data_sources(
)
if not dry_run:
mount_snapshot(hook_config.get('mount_command', 'mount'), full_snapshot_name, snapshot_mount_path)
mount_snapshot(
hook_config.get('mount_command', 'mount'), full_snapshot_name, snapshot_mount_path
)
if mount_point in source_directories:
source_directories.remove(mount_point)
@ -201,6 +203,7 @@ def destroy_snapshot(zfs_command, full_snapshot_name):
output_log_level=logging.DEBUG,
)
def get_all_snapshots(zfs_command):
'''
Given a ZFS command to run, return all ZFS snapshots as a sequence of full snapshot names of the
@ -218,10 +221,7 @@ def get_all_snapshots(zfs_command):
)
)
return tuple(
line.rstrip()
for line in list_output.splitlines()
)
return tuple(line.rstrip() for line in list_output.splitlines())
def remove_data_source_dumps(hook_config, config, log_prefix, borgmatic_runtime_directory, dry_run):
@ -266,9 +266,14 @@ def remove_data_source_dumps(hook_config, config, log_prefix, borgmatic_runtime_
# mounted is tough to do in a cross-platform way.
shutil.rmtree(snapshots_directory, ignore_errors=True)
for (_, mount_point) in datasets:
for _, mount_point in datasets:
snapshot_mount_path = os.path.join(snapshots_directory, mount_point.lstrip(os.path.sep))
logger.debug(f'{log_prefix}: Unmounting ZFS snapshot at {snapshot_mount_path}{dry_run_label}')
if not os.path.isdir(snapshot_mount_path):
continue
logger.debug(
f'{log_prefix}: Unmounting ZFS snapshot at {snapshot_mount_path}{dry_run_label}'
)
if not dry_run:
unmount_snapshot(umount_command, snapshot_mount_path)