فهرست منبع

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

Dan Helfman 7 ماه پیش
والد
کامیت
851c454ef0
5فایلهای تغییر یافته به همراه2 افزوده شده و 57 حذف شده
  1. 2 0
      NEWS
  2. 0 3
      borgmatic/commands/borgmatic.py
  3. 0 23
      borgmatic/config/validate.py
  4. 0 2
      tests/unit/commands/test_borgmatic.py
  5. 0 29
      tests/unit/config/test_validate.py

+ 2 - 0
NEWS

@@ -1,4 +1,6 @@
 1.9.2.dev0
 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.
  * #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
  * #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
    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
             break
 
 
     try:
     try:
-        if 'extract' in arguments or 'mount' in arguments:
-            validate.guard_single_repository_selected(repository, configs)
-
         validate.guard_configuration_contains_repository(repository, configs)
         validate.guard_configuration_contains_repository(repository, configs)
     except ValueError as error:
     except ValueError as error:
         yield from log_error_records(str(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:
     if count == 0:
         raise ValueError(f'Repository "{repository}" not found in configuration files')
         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():
 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.validate).should_receive('guard_configuration_contains_repository')
     flexmock(module).should_receive('run_configuration').and_return([])
     flexmock(module).should_receive('run_configuration').and_return([])
     arguments = {'extract': flexmock(repository='repo')}
     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():
 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.validate).should_receive('guard_configuration_contains_repository')
     flexmock(module).should_receive('run_configuration').and_return([])
     flexmock(module).should_receive('run_configuration').and_return([])
     arguments = {'mount': flexmock(repository='repo')}
     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',
             repository='nope',
             configurations={'config.yaml': {'repositories': ['repo', 'repo2']}},
             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']}},
-    )