mirror of
https://projects.torsion.org/witten/borgmatic.git
synced 2025-04-11 15:51:23 +00:00
Fix use of dashed command-line flags like "--repositories[2].append-only" generated from configuration (#303).
This commit is contained in:
parent
affe7cdc1b
commit
4065c5d0f7
3 changed files with 56 additions and 16 deletions
borgmatic/commands
tests
|
@ -359,7 +359,9 @@ def add_array_element_arguments(arguments_group, unparsed_arguments, flag_name):
|
|||
if '[0]' not in flag_name or not unparsed_arguments or '--help' in unparsed_arguments:
|
||||
return
|
||||
|
||||
pattern = re.compile(fr'^--{flag_name.replace("[0]", r"\[\d+\]").replace(".", r"\.")}$')
|
||||
pattern = re.compile(
|
||||
fr'^--{flag_name.replace("[0]", r"\[\d+\]").replace(".", r"\.").replace("_", "-")}$'
|
||||
)
|
||||
|
||||
try:
|
||||
# Find an existing list index flag (and its action) corresponding to the given flag name.
|
||||
|
@ -368,7 +370,7 @@ def add_array_element_arguments(arguments_group, unparsed_arguments, flag_name):
|
|||
for action in arguments_group._group_actions
|
||||
for action_flag_name in action.option_strings
|
||||
if pattern.match(action_flag_name)
|
||||
if f'--{flag_name}'.startswith(action_flag_name)
|
||||
if f'--{flag_name.replace("_", "-")}'.startswith(action_flag_name)
|
||||
)
|
||||
|
||||
# Based on the type of the action (e.g. argparse._StoreTrueAction), look up the corresponding
|
||||
|
@ -388,16 +390,25 @@ def add_array_element_arguments(arguments_group, unparsed_arguments, flag_name):
|
|||
if not pattern.match(unparsed_flag_name) or unparsed_flag_name == existing_flag_name:
|
||||
continue
|
||||
|
||||
arguments_group.add_argument(
|
||||
unparsed_flag_name,
|
||||
action=action_registry_name,
|
||||
choices=argument_action.choices,
|
||||
default=argument_action.default,
|
||||
dest=unparsed_flag_name.lstrip('-'),
|
||||
nargs=argument_action.nargs,
|
||||
required=argument_action.nargs,
|
||||
type=argument_action.type,
|
||||
)
|
||||
if action_registry_name in ('store_true', 'store_false'):
|
||||
arguments_group.add_argument(
|
||||
unparsed_flag_name,
|
||||
action=action_registry_name,
|
||||
default=argument_action.default,
|
||||
dest=unparsed_flag_name.lstrip('-'),
|
||||
required=argument_action.nargs,
|
||||
)
|
||||
else:
|
||||
arguments_group.add_argument(
|
||||
unparsed_flag_name,
|
||||
action=action_registry_name,
|
||||
choices=argument_action.choices,
|
||||
default=argument_action.default,
|
||||
dest=unparsed_flag_name.lstrip('-'),
|
||||
nargs=argument_action.nargs,
|
||||
required=argument_action.nargs,
|
||||
type=argument_action.type,
|
||||
)
|
||||
|
||||
|
||||
def add_arguments_from_schema(arguments_group, schema, unparsed_arguments, names=None):
|
||||
|
|
|
@ -51,12 +51,9 @@ def test_add_array_element_arguments_adds_arguments_for_array_index_flags():
|
|||
flexmock(arguments_group).should_receive('add_argument').with_args(
|
||||
'--foo[25].val',
|
||||
action='store_true',
|
||||
choices=object,
|
||||
default=object,
|
||||
default=False,
|
||||
dest='foo[25].val',
|
||||
nargs=object,
|
||||
required=object,
|
||||
type=object,
|
||||
).once()
|
||||
|
||||
module.add_array_element_arguments(
|
||||
|
|
|
@ -880,6 +880,38 @@ def test_add_array_element_arguments_adds_arguments_for_array_index_flags_with_e
|
|||
)
|
||||
|
||||
|
||||
def test_add_array_element_arguments_adds_arguments_for_array_index_flags_with_dashes():
|
||||
arguments_group = flexmock(
|
||||
_group_actions=(
|
||||
Group_action(
|
||||
option_strings=('--foo[0].val-and-stuff',),
|
||||
choices=flexmock(),
|
||||
default=flexmock(),
|
||||
nargs=flexmock(),
|
||||
required=flexmock(),
|
||||
type=flexmock(),
|
||||
),
|
||||
),
|
||||
_registries={'action': {'store_stuff': Group_action}},
|
||||
)
|
||||
arguments_group.should_receive('add_argument').with_args(
|
||||
'--foo[25].val-and-stuff',
|
||||
action='store_stuff',
|
||||
choices=object,
|
||||
default=object,
|
||||
dest='foo[25].val-and-stuff',
|
||||
nargs=object,
|
||||
required=object,
|
||||
type=object,
|
||||
).once()
|
||||
|
||||
module.add_array_element_arguments(
|
||||
arguments_group=arguments_group,
|
||||
unparsed_arguments=('--foo[25].val-and-stuff', 'fooval', '--bar[1].val', 'barval'),
|
||||
flag_name='foo[0].val_and_stuff',
|
||||
)
|
||||
|
||||
|
||||
def test_add_arguments_from_schema_with_non_dict_schema_bails():
|
||||
arguments_group = flexmock()
|
||||
flexmock(module).should_receive('make_argument_description').never()
|
||||
|
|
Loading…
Add table
Reference in a new issue