Options: treat array option -Dopt= and -Dopt=[] as equivalent
Currently the former will be parsed as [''], while the latter is parsed as [] in python. This makes for some obnoxious special handling depending on what the user passes. This is even more obnoxious since for string type arguments this doesn't require special handling.
This commit is contained in:
parent
14fe0985f7
commit
f3a8f9c34d
|
@ -61,6 +61,9 @@ empty. The `value` parameter specifies the default value of the option
|
|||
and if it is unset then the values of `choices` will be used as the
|
||||
default.
|
||||
|
||||
As of 0.47.0 -Dopt= and -Dopt=[] both pass an empty list, before this -Dopt=
|
||||
would pass a list with an empty string.
|
||||
|
||||
This type is available since version 0.44.0
|
||||
|
||||
### Features
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
## Array options treat -Dopt= and -Dopt=[] as equivalent
|
||||
|
||||
Prior to this change passing -Dopt= to an array opt would be interpreted as
|
||||
[''] (an array with an empty string), now -Dopt= is the same as -Dopt=[], an
|
||||
empty list.
|
|
@ -154,6 +154,8 @@ class UserArrayOption(UserOption):
|
|||
if isinstance(value, str):
|
||||
if value.startswith('['):
|
||||
newvalue = ast.literal_eval(value)
|
||||
elif value == '':
|
||||
newvalue = []
|
||||
else:
|
||||
if self.shlex_split:
|
||||
newvalue = shlex.split(value)
|
||||
|
|
|
@ -1786,6 +1786,26 @@ int main(int argc, char **argv) {
|
|||
changed = get_opt()
|
||||
self.assertDictEqual(changed, expected)
|
||||
|
||||
def test_array_option_empty_equivalents(self):
|
||||
"""Array options treat -Dopt=[] and -Dopt= as equivalent."""
|
||||
def get_opt():
|
||||
opts = self.introspect('--buildoptions')
|
||||
for x in opts:
|
||||
if x.get('name') == 'list':
|
||||
return x
|
||||
raise Exception(opts)
|
||||
|
||||
expected = {
|
||||
'name': 'list',
|
||||
'description': 'list',
|
||||
'type': 'array',
|
||||
'value': [],
|
||||
}
|
||||
tdir = os.path.join(self.unit_test_dir, '18 array option')
|
||||
self.init(tdir, extra_args='-Dlist=')
|
||||
original = get_opt()
|
||||
self.assertDictEqual(original, expected)
|
||||
|
||||
def opt_has(self, name, value):
|
||||
res = self.introspect('--buildoptions')
|
||||
found = False
|
||||
|
|
Loading…
Reference in New Issue