If a boolean option name already starts with "no_", don't add a "--no-no-..." CLI flag (#303).

This commit is contained in:
2025-04-03 16:21:22 -07:00
parent 3f25f3f0ff
commit 3eabda45f2
2 changed files with 39 additions and 1 deletions

View File

@@ -513,7 +513,12 @@ def add_arguments_from_schema(arguments_group, schema, unparsed_arguments, names
default=None,
help=description,
)
no_flag_name = '.'.join(names[:-1] + ('no-' + names[-1],)).replace('_', '-')
if names[-1].startswith('no_'):
no_flag_name = '.'.join(names[:-1] + (names[-1][len('no_') :],)).replace('_', '-')
else:
no_flag_name = '.'.join(names[:-1] + ('no-' + names[-1],)).replace('_', '-')
arguments_group.add_argument(
f'--{no_flag_name}',
dest=flag_name.replace('-', '_'),

View File

@@ -1235,6 +1235,39 @@ def test_add_arguments_from_schema_with_nested_boolean_adds_two_valueless_flags(
)
def test_add_arguments_from_schema_with_boolean_with_name_prefixed_with_no_adds_two_valueless_flags_and_removes_the_no_for_one():
arguments_group = flexmock()
flexmock(module).should_receive('make_argument_description').and_return('help')
flexmock(module.borgmatic.config.schema).should_receive('parse_type').and_return(bool)
arguments_group.should_receive('add_argument').with_args(
'--no-foo',
action='store_true',
default=None,
help='help',
).once()
arguments_group.should_receive('add_argument').with_args(
'--foo',
dest='no_foo',
action='store_false',
default=None,
help=object,
).once()
flexmock(module).should_receive('add_array_element_arguments')
module.add_arguments_from_schema(
arguments_group=arguments_group,
schema={
'type': 'object',
'properties': {
'no_foo': {
'type': 'boolean',
}
},
},
unparsed_arguments=(),
)
def test_add_arguments_from_schema_skips_omitted_flag_name():
arguments_group = flexmock()
flexmock(module).should_receive('make_argument_description').and_return('help')