Fix an error when restoring multiple directory-format database dumps at once (#1212).

This commit is contained in:
Dan Helfman 2025-12-23 20:28:15 -08:00
commit a3750d1e06
4 changed files with 14 additions and 10 deletions

3
NEWS
View file

@ -1,3 +1,6 @@
2.0.14.dev0
* #1212: Fix an error when restoring multiple directory-format database dumps at once.
2.0.13
* #1054: Allow the Btrfs hook to create and delete snapshots even when running
as a non-root user. See the documentation for more information:

View file

@ -129,14 +129,14 @@ def get_configured_data_source(config, restore_dump):
def strip_path_prefix_from_extracted_dump_destination(
destination_path,
extract_path,
borgmatic_runtime_directory,
):
'''
Directory-format dump files get extracted into a temporary directory containing a path prefix
that depends how the files were stored in the archive. So, given the destination path where the
dump was extracted and the borgmatic runtime directory, move the dump files such that the
restore doesn't have to deal with that varying path prefix.
that depends how the files were stored in the archive. So, given the path where the dump was
extracted and the borgmatic runtime directory, move the dump files such that the restore doesn't
have to deal with that varying path prefix.
For instance, if the dump was extracted to:
@ -150,16 +150,16 @@ def strip_path_prefix_from_extracted_dump_destination(
/run/user/0/borgmatic/postgresql_databases/test/...
'''
for subdirectory_path, _, _ in os.walk(destination_path):
for subdirectory_path, _, _ in os.walk(extract_path):
databases_directory = os.path.basename(subdirectory_path)
if not databases_directory.endswith('_databases'):
continue
shutil.move(
subdirectory_path,
os.path.join(borgmatic_runtime_directory, databases_directory),
)
destination_path = os.path.join(borgmatic_runtime_directory, databases_directory)
shutil.rmtree(destination_path, ignore_errors=True)
shutil.move(subdirectory_path, destination_path)
break

View file

@ -1,6 +1,6 @@
[project]
name = "borgmatic"
version = "2.0.13"
version = "2.0.14.dev0"
authors = [
{ name="Dan Helfman", email="witten@torsion.org" },
]

View file

@ -295,6 +295,7 @@ def test_strip_path_prefix_from_extracted_dump_destination_renames_first_matchin
],
)
flexmock(module.shutil).should_receive('rmtree')
flexmock(module.shutil).should_receive('move').with_args(
'/foo/bar/postgresql_databases',
'/run/user/0/borgmatic/postgresql_databases',