[PATCH] bsp-builder: Fix mailer options exception
Chris Johns
chrisj at rtems.org
Mon Sep 20 20:43:51 UTC 2021
Hi Alex,
I prefer Python’s argparse and prefer we move the other way. The options handling originally came from the RSB and has lots of issues. I regret it.
Sorry about this.
Chris
> On 21 Sep 2021, at 2:08 am, Alex White <alex.white at oarcorp.com> wrote:
>
> This changes the object holding the command line arguments from an
> argparse.Namespace to an rtemstoolkit.options.command_line. This matches
> the type expected by rtemstoolkit.mailer.mail.__init__ and is the type
> used in tester/rt/test.py and run.py.
> ---
> tester/rt/check.py | 151 +++++++++++++++++++++++++--------------------
> 1 file changed, 84 insertions(+), 67 deletions(-)
>
> diff --git a/tester/rt/check.py b/tester/rt/check.py
> index c01c25d..982b65e 100755
> --- a/tester/rt/check.py
> +++ b/tester/rt/check.py
> @@ -54,6 +54,8 @@ from rtemstoolkit import rtems
> from rtemstoolkit import textbox
> from rtemstoolkit import version
>
> +import tester.rt.options
> +
> #
> # Group loggin entries together.
> #
> @@ -1153,55 +1155,40 @@ def run(args):
> description += 'can build based on tier, architecture, or BSP. You can control '
> description += 'the profile of build with various build configuration settings.'
>
> - argsp = argparse.ArgumentParser(prog = 'rtems-bsp-builder',
> - description = description)
> - argsp.add_argument('--prefix', help = 'Prefix to build the BSP.',
> - type = str)
> - argsp.add_argument('--rtems-tools', help = 'The RTEMS tools directory.',
> - type = str)
> - argsp.add_argument('--rtems', help = 'The RTEMS source tree.',
> - type = str)
> - argsp.add_argument('--build-path', help = 'Path to build in.',
> - type = str)
> - argsp.add_argument('--log', help = 'Log file.', type = str)
> - argsp.add_argument('--config-report', help = 'Report the configuration.',
> - type = str, default = None,
> - choices = ['all', 'profiles', 'builds', 'archs'])
> - argsp.add_argument('--warnings-report', help = 'Report the warnings to a file.',
> - type = str, default = None)
> - argsp.add_argument('--failures-report', help = 'Report the failures to a file.',
> - type = str, default = None)
> - argsp.add_argument('--stop-on-error', help = 'Stop on an error.',
> - action = 'store_true')
> - argsp.add_argument('--no-clean', help = 'Do not clean the build output.',
> - action = 'store_true')
> - argsp.add_argument('--profiles', help = 'Build the listed profiles (profile,profile,..).',
> - type = str, default = 'tier-1')
> - argsp.add_argument('--arch', help = 'Build the architectures (arch,arch,..).',
> - type = str)
> - argsp.add_argument('--bsp', help = 'Build the BSPs (arch/bsp,arch/bsp,..).',
> - type = str)
> - argsp.add_argument('--build', help = 'Build name to build (see --config-report).',
> - type = str, default='all')
> - argsp.add_argument('--jobs', help = 'Number of jobs to run.',
> - type = str, default = '1/%d' % (host.cpus()))
> - argsp.add_argument('--dry-run', help = 'Do not run the actual builds.',
> - action = 'store_true')
> - mailer.add_arguments(argsp)
> -
> - opts = argsp.parse_args(args[1:])
> + optargs = {
> + '--prefix': 'Prefix to build the BSP.',
> + '--rtems-tools': 'The RTEMS tools directory.',
> + '--rtems': 'The RTEMS source tree.',
> + '--build-path': 'Path to build in.',
> + '--log': 'Log file.',
> + '--config-report': 'Report the configuration.',
> + '--warnings-report': 'Report the warnings to a file.',
> + '--failures-report': 'Report the failures to a file.',
> + '--stop-on-error': 'Stop on an error.',
> + '--no-clean': 'Do not clean the build output.',
> + '--profiles': 'Build the listed profiles (profile,profile,..).',
> + '--arch': 'Build the architectures (arch,arch,..).',
> + '--bsp': 'Build the BSPs (arch/bsp,arch/bsp,..).',
> + '--build': 'Build name to build (see --config-report).',
> + '--jobs': 'Number of jobs to run.',
> + '--dry-run': 'Do not run the actual builds.'
> + }
> + mailer.append_options(optargs)
> + opts = tester.rt.options.load(args, optargs = optargs)
> +
> mail = None
> - if opts.mail:
> + if opts.find_arg('--mail'):
> mail = mailer.mail(opts)
> # Request these now to generate any errors.
> from_addr = mail.from_address()
> smtp_host = mail.smtp_host()
> - if 'mail_to' in opts and opts.mail_to is not None:
> - to_addr = opts.mail_to
> + to_addr = opts.find_arg('--mail-to')
> + if to_addr:
> + to_addr = to_addr[1]
> else:
> to_addr = 'build at rtems.org'
> - if opts.log is not None:
> - logf = opts.log
> + if opts.find_arg('--log') is not None:
> + logf = opts.find_arg('--log')[1]
> log.default = log.log([logf])
> log.notice(title())
> log.output(command_line())
> @@ -1211,48 +1198,78 @@ def run(args):
> smtp_host))
>
> config = rtems.configuration()
> - config.load(config_file, opts.build)
> + build = opts.find_arg('--build')
> + if build is not None:
> + build = build[1]
> + config.load(config_file, build)
>
> - if opts.config_report:
> - log.notice('Configuration Report: %s' % (opts.config_report))
> + config_report = opts.find_arg('--config-report')
> + if config_report is not None:
> + log.notice('Configuration Report: %s' % (config_report[1]))
> c_profiles = False
> c_builds = False
> c_archs = False
> - if opts.config_report == 'all':
> + if config_report[1] == 'all':
> c_profiles = True
> c_builds = True
> c_archs = True
> - elif opts.config_report == 'profiles':
> + elif config_report[1] == 'profiles':
> c_profiles = True
> - elif opts.config_report == 'builds':
> + elif config_report[1] == 'builds':
> c_builds = True
> - elif opts.config_report == 'archs':
> + elif config_report[1] == 'archs':
> c_archs = True
> log.notice(config.report(c_profiles, c_builds, c_archs))
> sys.exit(0)
>
> - if opts.rtems is None:
> + rtems_opt = opts.find_arg('--rtems')
> + if rtems_opt is None:
> raise error.general('No RTEMS source provided on the command line')
> - if opts.prefix is not None:
> - prefix = path.shell(opts.prefix)
> - if opts.rtems_tools is not None:
> - tools = path.shell(opts.rtems_tools)
> - if opts.build_path is not None:
> - build_dir = path.shell(opts.build_path)
> -
> - options = { 'stop-on-error' : opts.stop_on_error,
> - 'no-clean' : opts.no_clean,
> - 'dry-run' : opts.dry_run,
> - 'jobs' : opts.jobs,
> - 'warnings-report' : opts.warnings_report,
> - 'failures-report' : opts.failures_report }
> + prefix_opt = opts.find_arg('--prefix')
> + if prefix_opt is not None:
> + prefix = path.shell(prefix_opt[1])
> + rtems_tools = opts.find_arg('--rtems-tools')
> + if rtems_tools is not None:
> + tools = path.shell(rtems_tools[1])
> + build_path = opts.find_arg('--build-path')
> + if build_path is not None:
> + build_dir = path.shell(build_path[1])
> +
> + jobs = opts.find_arg('--jobs')
> + if jobs is not None:
> + jobs = jobs[1]
> + else:
> + jobs = '1/%d' % (host.cpus())
> + warnings_report = opts.find_arg('--warnings-report')
> + if warnings_report is not None:
> + warnings_report = warnings_report[1]
> + failures_report = opts.find_arg('--failures-report')
> + if failures_report is not None:
> + failures_report = failures_report[1]
> + options = { 'stop-on-error' : opts.find_arg('--stop-on-error'),
> + 'no-clean' : opts.no_clean(),
> + 'dry-run' : opts.dry_run(),
> + 'jobs' : jobs,
> + 'warnings-report' : warnings_report,
> + 'failures-report' : failures_report }
>
> b = builder(config, rtems_version(), prefix, tools,
> - path.shell(opts.rtems), build_dir, options)
> + path.shell(rtems_opt[1]), build_dir, options)
>
> - profiles = comma_split(opts.profiles)
> - archs = comma_split(opts.arch)
> - bsps = comma_split(opts.bsp)
> + profiles_opt = opts.find_arg('--profiles')
> + if profiles_opt is not None:
> + profiles_opt = profiles_opt[1]
> + else:
> + profiles_opt = 'tier-1'
> + arch_opt = opts.find_arg('--arch')
> + if arch_opt is not None:
> + arch_opt = arch_opt[1]
> + bsp_opt = opts.find_arg('--bsp')
> + if bsp_opt is not None:
> + bsp_opt = bsp_opt[1]
> + profiles = comma_split(profiles_opt)
> + archs = comma_split(arch_opt)
> + bsps = comma_split(bsp_opt)
>
> #
> # The default is build a profile.
> --
> 2.27.0
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list