
Simon,
On Wed, 25 Nov 2020 at 16:30, Simon Glass sjg@chromium.org wrote:
Here is a pointer to the docs I saw:
https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.set_...
"Parser-level defaults can be particularly useful when working with multiple parsers. See the add_subparsers() method for an example of this type."
I had looked at the same documentation and needed to carefully read the example to infer the original author's intended messaging...
The only mention of this in the subparser-docs was:
One particularly effective way of handling sub-commands is to combine the use of the add_subparsers() method with calls to set_defaults() so that each subparser knows which Python function it should execute.
This example just demonstrated that two different subparsers could create a different default for the same argument name. I couldn't find any example of a set_defaults() on a higher-level parser propagating and the argparse-source doesn't seem to try to propagate defaults either.
I am starting to think that the correct fix for this would be more along the lines of:
diff --git a/tools/patman/settings.py b/tools/patman/settings.py index bb3f868..525c69e 100644 --- a/tools/patman/settings.py +++ b/tools/patman/settings.py @@ -266,7 +266,11 @@ def _UpdateDefaults(main_parser, config): print("WARNING: Unknown setting %s" % name)
# Set all the defaults (this propagates through all subparsers)
- main_parser.set_defaults(**defaults)
- for parser in parsers:
for name, val in defaults.items():
if parser.get_default(name) and val:
parser.set_defaults(name=val)
def _ReadAliasFile(fname): """Read in the U-Boot git alias file if it exists.
than of what I sent out earlier.
An interesting aside: it looks as if the double-parsing of the args leads to 'defaults' being installed for all arguments that are passed in the first cycle (e.g. count, project and patchwork_url suddenly have the values loaded from the config files and parsed from the args populated with 'default' values).
Philipp.