[Buildroot] [PATCH 1/2] autobuild-run: correctly handle default argument values

Thomas De Schampheleire patrickdepinguin at gmail.com
Sun Mar 1 21:19:13 UTC 2015


On Sun, Mar 1, 2015 at 10:09 PM, Thomas De Schampheleire
<patrickdepinguin at gmail.com> wrote:
> From: Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
>
> In the original code sent on the mailing list, priority for arguments was
> given to the config file, followed by arguments passed on the command-line.
> In this order, the defaults specified to docopt would indeed be treated as
> lowest priority, as expected.
>
> However, the arguments specified on the command-line should have priority
> over those from the config file, so the expected priority is:
>     command-line > config file > defaults
>
> By switching the order of argument dictionaries when calling the merge
> method, the defaults are no longer handled correctly. To fix this, we must
> not tell docopt about the defaults, but keep them in a separate dictionary.
> Then, using a two-step merge we can obtain the right priority for arguments.
>
> For some reason, docopt does not like us passing __doc__ directly if it is
> constructed dynamically with %s specifiers. Work around this via an
> intermediate variable doc.
>
> Signed-off-by: Thomas De Schampheleire <thomas.de.schampheleire at gmail.com>
> ---
>  scripts/autobuild-run | 31 +++++++++++++++++++++++++------
>  1 file changed, 25 insertions(+), 6 deletions(-)
>
> diff --git a/scripts/autobuild-run b/scripts/autobuild-run
> index 442531f..246a032 100755
> --- a/scripts/autobuild-run
> +++ b/scripts/autobuild-run
> @@ -59,16 +59,25 @@
>  #   message 'directory not empty' which suggests that someone is writing to the
>  #   directory at the time of removal.
>
> -"""autobuild-run - run Buildroot autobuilder
> +# Don't tell docopt about the defaults, as it would not allow the following
> +# priority hierarchy for arguments: command-line > config file > defaults
> +defaults = {
> +    '--ninstances': '1',
> +    '--njobs': '1',
> +    '--submitter': 'N/A',
> +    '--make-opts': '',
> +}
> +
> +doc = """autobuild-run - run Buildroot autobuilder
>
>  Usage: autobuild-run [options]
>
>  Options:
>    -h, --help                     show this help message and exit
>    -V, --version                  show version
> -  -n, --ninstances NINSTANCES    number of parallel instances [default: 1]
> -  -j, --njobs NJOBS              number of parallel jobs [default: 1]
> -  -s, --submitter SUBMITTER      name/machine of submitter [default: N/A]
> +  -n, --ninstances NINSTANCES    number of parallel instances
> +  -j, --njobs NJOBS              number of parallel jobs
> +  -s, --submitter SUBMITTER      name/machine of submitter
>    --http-login LOGIN             username to send results with
>    --http-password PASSWORD       password to send results with (for security
>                                   reasons it is recommended to define this in the
> @@ -91,7 +100,14 @@ Format of the configuration file:
>     http-login = <value>
>     http-password = <value>
>     submitter = <value>
> -"""
> +
> +Default values for the arguments are:
> +
> +  %s
> +""" % '\n  '.join(
> +    ['%s = %s' % (key, val) for (key, val) in defaults.iteritems()])
> +
> +__doc__ = doc
>
>  import urllib2
>  import csv
> @@ -700,13 +716,16 @@ def main():
>      check_version()
>      sysinfo = SystemInfo()
>
> -    args = docopt.docopt(__doc__, version=VERSION)
> +    args = docopt.docopt(doc, version=VERSION)
>
>      if args['--config']:
>          ini_config = load_ini_config(args['--config'])
>          # merge config/args, priority given to args
>          args = merge(args, ini_config)
>
> +    # load in defaults at lowest priority
> +    args = merge(args, defaults)
> +
>      # http_login/password could theoretically be allowed as empty, so check
>      # explicitly on None.
>      upload = (args['--http-login'] is not None) \
> --
> 1.8.5.1
>

To be clear, this patch series builds on top of my earlier
autobuild-series, which was added to ThomasP's autobuild-test tree
with some fixups.


More information about the buildroot mailing list