Browse Source

Remove the restriction that the "extract" and "mount" actions must match a single repository (#722).

Dan Helfman 7 months ago
parent
commit
851c454ef0

+ 2 - 0
NEWS

@@ -1,4 +1,6 @@
 1.9.2.dev0
+ * #722: Remove the restriction that the "extract" and "mount" actions must match a single
+   repository. Now they work more like other actions, where each repository is applied in turn.
  * #932: Fix the missing build backend setting in pyproject.toml to allow Fedora builds.
  * #934: Update the logic that probes for the borgmatic streaming database dump, bootstrap
    metadata, and check state directories to support more platforms and use cases. See the

+ 0 - 3
borgmatic/commands/borgmatic.py

@@ -793,9 +793,6 @@ def collect_configuration_run_summary_logs(configs, config_paths, arguments):
             break
 
     try:
-        if 'extract' in arguments or 'mount' in arguments:
-            validate.guard_single_repository_selected(repository, configs)
-
         validate.guard_configuration_contains_repository(repository, configs)
     except ValueError as error:
         yield from log_error_records(str(error))

+ 0 - 23
borgmatic/config/validate.py

@@ -199,26 +199,3 @@ def guard_configuration_contains_repository(repository, configurations):
 
     if count == 0:
         raise ValueError(f'Repository "{repository}" not found in configuration files')
-
-
-def guard_single_repository_selected(repository, configurations):
-    '''
-    Given a repository path and a dict mapping from config filename to corresponding parsed config
-    dict, ensure either a single repository exists across all configuration files or a repository
-    path was given.
-    '''
-    if repository:
-        return
-
-    count = len(
-        tuple(
-            config_repository
-            for config in configurations.values()
-            for config_repository in config['repositories']
-        )
-    )
-
-    if count != 1:
-        raise ValueError(
-            "Can't determine which repository to use. Use --repository to disambiguate"
-        )

+ 0 - 2
tests/unit/commands/test_borgmatic.py

@@ -1397,7 +1397,6 @@ def test_collect_configuration_run_summary_executes_hooks_for_create():
 
 
 def test_collect_configuration_run_summary_logs_info_for_success_with_extract():
-    flexmock(module.validate).should_receive('guard_single_repository_selected')
     flexmock(module.validate).should_receive('guard_configuration_contains_repository')
     flexmock(module).should_receive('run_configuration').and_return([])
     arguments = {'extract': flexmock(repository='repo')}
@@ -1429,7 +1428,6 @@ def test_collect_configuration_run_summary_logs_extract_with_repository_error():
 
 
 def test_collect_configuration_run_summary_logs_info_for_success_with_mount():
-    flexmock(module.validate).should_receive('guard_single_repository_selected')
     flexmock(module.validate).should_receive('guard_configuration_contains_repository')
     flexmock(module).should_receive('run_configuration').and_return([])
     arguments = {'mount': flexmock(repository='repo')}

+ 0 - 29
tests/unit/config/test_validate.py

@@ -210,32 +210,3 @@ def test_guard_configuration_contains_repository_errors_when_repository_does_not
             repository='nope',
             configurations={'config.yaml': {'repositories': ['repo', 'repo2']}},
         )
-
-
-def test_guard_single_repository_selected_raises_when_multiple_repositories_configured_and_none_selected():
-    with pytest.raises(ValueError):
-        module.guard_single_repository_selected(
-            repository=None,
-            configurations={'config.yaml': {'repositories': ['repo', 'repo2']}},
-        )
-
-
-def test_guard_single_repository_selected_does_not_raise_when_single_repository_configured_and_none_selected():
-    module.guard_single_repository_selected(
-        repository=None,
-        configurations={'config.yaml': {'repositories': ['repo']}},
-    )
-
-
-def test_guard_single_repository_selected_does_not_raise_when_no_repositories_configured_and_one_selected():
-    module.guard_single_repository_selected(
-        repository='repo',
-        configurations={'config.yaml': {'repositories': []}},
-    )
-
-
-def test_guard_single_repository_selected_does_not_raise_when_repositories_configured_and_one_selected():
-    module.guard_single_repository_selected(
-        repository='repo',
-        configurations={'config.yaml': {'repositories': ['repo', 'repo2']}},
-    )