From 1ea04aedf0a990bdc06577da2e19ef2ab1c83291 Mon Sep 17 00:00:00 2001 From: Dan Helfman Date: Fri, 23 Oct 2020 16:06:00 -0700 Subject: [PATCH] Merge override values when specifying the "--override" flag multiple times (#361). --- NEWS | 2 ++ borgmatic/commands/arguments.py | 1 + tests/integration/commands/test_arguments.py | 29 ++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/NEWS b/NEWS index a3e5d83..00fff24 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,8 @@ * #341: Add "temporary_directory" option for changing Borg's temporary directory. * #352: Lock down systemd security settings in sample systemd service file. * #355: Fix traceback when a database hook value is null in a configuration file. + * #361: Merge override values when specifying the "--override" flag multiple times. The previous + behavior was to take the value of the last "--override" flag only. 1.5.10 * #347: Add hooks that run for the "extract" action: "before_extract" and "after_extract". diff --git a/borgmatic/commands/arguments.py b/borgmatic/commands/arguments.py index e201e62..d4019ef 100644 --- a/borgmatic/commands/arguments.py +++ b/borgmatic/commands/arguments.py @@ -178,6 +178,7 @@ def parse_arguments(*unparsed_arguments): metavar='SECTION.OPTION=VALUE', nargs='+', dest='overrides', + action='extend', help='One or more configuration file options to override with specified values', ) global_group.add_argument( diff --git a/tests/integration/commands/test_arguments.py b/tests/integration/commands/test_arguments.py index 7871d4a..174a316 100644 --- a/tests/integration/commands/test_arguments.py +++ b/tests/integration/commands/test_arguments.py @@ -71,6 +71,35 @@ def test_parse_arguments_with_log_file_verbosity_overrides_default(): assert global_arguments.log_file_verbosity == -1 +def test_parse_arguments_with_single_override_parses(): + flexmock(module.collect).should_receive('get_default_config_paths').and_return(['default']) + + arguments = module.parse_arguments('--override', 'foo.bar=baz') + + global_arguments = arguments['global'] + assert global_arguments.overrides == ['foo.bar=baz'] + + +def test_parse_arguments_with_multiple_overrides_parses(): + flexmock(module.collect).should_receive('get_default_config_paths').and_return(['default']) + + arguments = module.parse_arguments('--override', 'foo.bar=baz', 'foo.quux=7') + + global_arguments = arguments['global'] + assert global_arguments.overrides == ['foo.bar=baz', 'foo.quux=7'] + + +def test_parse_arguments_with_multiple_overrides_and_flags_parses(): + flexmock(module.collect).should_receive('get_default_config_paths').and_return(['default']) + + arguments = module.parse_arguments( + '--override', 'foo.bar=baz', '--override', 'foo.quux=7', 'this.that=8' + ) + + global_arguments = arguments['global'] + assert global_arguments.overrides == ['foo.bar=baz', 'foo.quux=7', 'this.that=8'] + + def test_parse_arguments_with_list_json_overrides_default(): arguments = module.parse_arguments('list', '--json')