[PATCH 3/3] patman: fix project-defaults not propagating into parsers

Philipp Tomsich philipp.tomsich at vrull.eu
Wed Nov 25 20:41:22 CET 2020


Simon,

On Wed, 25 Nov 2020 at 16:30, Simon Glass <sjg at chromium.org> wrote:
> Here is a pointer to the docs I saw:
>
>
https://docs.python.org/3/library/argparse.html#argparse.ArgumentParser.set_defaults
>
> "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.


More information about the U-Boot mailing list