diff options
| author | Paul Eggleton <paul.eggleton@linux.intel.com> | 2015-12-22 17:02:54 +1300 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2015-12-28 09:25:12 +0000 |
| commit | 8e0a84c90175cc2fedff0272abda073ee270b876 (patch) | |
| tree | cc5e7a7778ffe12e0376cb7c06f1c1d69b79dfe9 | |
| parent | 548d4332e827cc9ae13fd57517a42fa0f139880f (diff) | |
| download | poky-8e0a84c90175cc2fedff0272abda073ee270b876.tar.gz | |
scripts: print usage in argparse-using scripts when a command-line error occurs
For scripts that use Python's standard argparse module to parse
command-line arguments, create a subclass which will show the usage
the usage information when a command-line parsing error occurs. The most
common case would be when the script is run with no arguments; at least
then the user immediately gets to see what arguments they might need to
pass instead of just an error message.
(From OE-Core rev: d62fe7c9bc2df6a4464440a3cae0539074bf99aa)
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
| -rwxr-xr-x | scripts/contrib/devtool-stress.py | 5 | ||||
| -rwxr-xr-x | scripts/devtool | 7 | ||||
| -rw-r--r-- | scripts/lib/argparse_oe.py | 11 | ||||
| -rw-r--r-- | scripts/lib/scriptutils.py | 1 | ||||
| -rwxr-xr-x | scripts/oe-pkgdata-util | 5 | ||||
| -rwxr-xr-x | scripts/oe-publish-sdk | 5 | ||||
| -rwxr-xr-x | scripts/oe-selftest | 3 | ||||
| -rwxr-xr-x | scripts/recipetool | 7 | ||||
| -rwxr-xr-x | scripts/send-error-report | 6 | ||||
| -rwxr-xr-x | scripts/test-remote-image | 3 |
10 files changed, 38 insertions, 15 deletions
diff --git a/scripts/contrib/devtool-stress.py b/scripts/contrib/devtool-stress.py index 4b35fc9d0e..8cf92ca2fe 100755 --- a/scripts/contrib/devtool-stress.py +++ b/scripts/contrib/devtool-stress.py | |||
| @@ -35,6 +35,7 @@ import fnmatch | |||
| 35 | scripts_lib_path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'lib')) | 35 | scripts_lib_path = os.path.abspath(os.path.join(os.path.dirname(os.path.realpath(__file__)), '..', 'lib')) |
| 36 | sys.path.insert(0, scripts_lib_path) | 36 | sys.path.insert(0, scripts_lib_path) |
| 37 | import scriptutils | 37 | import scriptutils |
| 38 | import argparse_oe | ||
| 38 | logger = scriptutils.logger_create('devtool-stress') | 39 | logger = scriptutils.logger_create('devtool-stress') |
| 39 | 40 | ||
| 40 | def select_recipes(args): | 41 | def select_recipes(args): |
| @@ -204,8 +205,8 @@ def stress_modify(args): | |||
| 204 | 205 | ||
| 205 | 206 | ||
| 206 | def main(): | 207 | def main(): |
| 207 | parser = argparse.ArgumentParser(description="devtool stress tester", | 208 | parser = argparse_oe.ArgumentParser(description="devtool stress tester", |
| 208 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") | 209 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") |
| 209 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') | 210 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') |
| 210 | parser.add_argument('-r', '--resume-from', help='Resume from specified recipe', metavar='PN') | 211 | parser.add_argument('-r', '--resume-from', help='Resume from specified recipe', metavar='PN') |
| 211 | parser.add_argument('-o', '--only', help='Only test specified recipes (comma-separated without spaces, wildcards allowed)', metavar='PNLIST') | 212 | parser.add_argument('-o', '--only', help='Only test specified recipes (comma-separated without spaces, wildcards allowed)', metavar='PNLIST') |
diff --git a/scripts/devtool b/scripts/devtool index 9d3287c6d3..955495ea33 100755 --- a/scripts/devtool +++ b/scripts/devtool | |||
| @@ -37,6 +37,7 @@ lib_path = scripts_path + '/lib' | |||
| 37 | sys.path = sys.path + [lib_path] | 37 | sys.path = sys.path + [lib_path] |
| 38 | from devtool import DevtoolError, setup_tinfoil | 38 | from devtool import DevtoolError, setup_tinfoil |
| 39 | import scriptutils | 39 | import scriptutils |
| 40 | import argparse_oe | ||
| 40 | logger = scriptutils.logger_create('devtool') | 41 | logger = scriptutils.logger_create('devtool') |
| 41 | 42 | ||
| 42 | plugins = [] | 43 | plugins = [] |
| @@ -185,9 +186,9 @@ def main(): | |||
| 185 | break | 186 | break |
| 186 | pth = os.path.dirname(pth) | 187 | pth = os.path.dirname(pth) |
| 187 | 188 | ||
| 188 | parser = argparse.ArgumentParser(description="OpenEmbedded development tool", | 189 | parser = argparse_oe.ArgumentParser(description="OpenEmbedded development tool", |
| 189 | add_help=False, | 190 | add_help=False, |
| 190 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") | 191 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") |
| 191 | parser.add_argument('--basepath', help='Base directory of SDK / build directory') | 192 | parser.add_argument('--basepath', help='Base directory of SDK / build directory') |
| 192 | parser.add_argument('--bbpath', help='Explicitly specify the BBPATH, rather than getting it from the metadata') | 193 | parser.add_argument('--bbpath', help='Explicitly specify the BBPATH, rather than getting it from the metadata') |
| 193 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') | 194 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') |
diff --git a/scripts/lib/argparse_oe.py b/scripts/lib/argparse_oe.py new file mode 100644 index 0000000000..c2fee6de05 --- /dev/null +++ b/scripts/lib/argparse_oe.py | |||
| @@ -0,0 +1,11 @@ | |||
| 1 | import sys | ||
| 2 | import argparse | ||
| 3 | |||
| 4 | class ArgumentParser(argparse.ArgumentParser): | ||
| 5 | """Our own version of argparse's ArgumentParser""" | ||
| 6 | |||
| 7 | def error(self, message): | ||
| 8 | sys.stderr.write('ERROR: %s\n' % message) | ||
| 9 | self.print_help() | ||
| 10 | sys.exit(2) | ||
| 11 | |||
diff --git a/scripts/lib/scriptutils.py b/scripts/lib/scriptutils.py index 3366882635..4dd7ef2a0d 100644 --- a/scripts/lib/scriptutils.py +++ b/scripts/lib/scriptutils.py | |||
| @@ -19,6 +19,7 @@ import sys | |||
| 19 | import os | 19 | import os |
| 20 | import logging | 20 | import logging |
| 21 | import glob | 21 | import glob |
| 22 | import argparse | ||
| 22 | 23 | ||
| 23 | def logger_create(name): | 24 | def logger_create(name): |
| 24 | logger = logging.getLogger(name) | 25 | logger = logging.getLogger(name) |
diff --git a/scripts/oe-pkgdata-util b/scripts/oe-pkgdata-util index afdceaae29..8e22e020e7 100755 --- a/scripts/oe-pkgdata-util +++ b/scripts/oe-pkgdata-util | |||
| @@ -33,6 +33,7 @@ scripts_path = os.path.dirname(os.path.realpath(__file__)) | |||
| 33 | lib_path = scripts_path + '/lib' | 33 | lib_path = scripts_path + '/lib' |
| 34 | sys.path = sys.path + [lib_path] | 34 | sys.path = sys.path + [lib_path] |
| 35 | import scriptutils | 35 | import scriptutils |
| 36 | import argparse_oe | ||
| 36 | logger = scriptutils.logger_create('pkgdatautil') | 37 | logger = scriptutils.logger_create('pkgdatautil') |
| 37 | 38 | ||
| 38 | def tinfoil_init(): | 39 | def tinfoil_init(): |
| @@ -417,8 +418,8 @@ def find_path(args): | |||
| 417 | 418 | ||
| 418 | 419 | ||
| 419 | def main(): | 420 | def main(): |
| 420 | parser = argparse.ArgumentParser(description="OpenEmbedded pkgdata tool - queries the pkgdata files written out during do_package", | 421 | parser = argparse_oe.ArgumentParser(description="OpenEmbedded pkgdata tool - queries the pkgdata files written out during do_package", |
| 421 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") | 422 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") |
| 422 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') | 423 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') |
| 423 | parser.add_argument('-p', '--pkgdata-dir', help='Path to pkgdata directory (determined automatically if not specified)') | 424 | parser.add_argument('-p', '--pkgdata-dir', help='Path to pkgdata directory (determined automatically if not specified)') |
| 424 | subparsers = parser.add_subparsers(title='subcommands', metavar='<subcommand>') | 425 | subparsers = parser.add_subparsers(title='subcommands', metavar='<subcommand>') |
diff --git a/scripts/oe-publish-sdk b/scripts/oe-publish-sdk index c4c35bda11..c8c79c213c 100755 --- a/scripts/oe-publish-sdk +++ b/scripts/oe-publish-sdk | |||
| @@ -24,6 +24,7 @@ scripts_path = os.path.dirname(os.path.realpath(__file__)) | |||
| 24 | lib_path = scripts_path + '/lib' | 24 | lib_path = scripts_path + '/lib' |
| 25 | sys.path = sys.path + [lib_path] | 25 | sys.path = sys.path + [lib_path] |
| 26 | import scriptutils | 26 | import scriptutils |
| 27 | import argparse_oe | ||
| 27 | logger = scriptutils.logger_create('sdktool') | 28 | logger = scriptutils.logger_create('sdktool') |
| 28 | 29 | ||
| 29 | def mkdir(d): | 30 | def mkdir(d): |
| @@ -113,8 +114,8 @@ def publish(args): | |||
| 113 | 114 | ||
| 114 | 115 | ||
| 115 | def main(): | 116 | def main(): |
| 116 | parser = argparse.ArgumentParser(description="OpenEmbedded development tool", | 117 | parser = argparse_oe.ArgumentParser(description="OpenEmbedded development tool", |
| 117 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") | 118 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") |
| 118 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') | 119 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') |
| 119 | parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') | 120 | parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') |
| 120 | 121 | ||
diff --git a/scripts/oe-selftest b/scripts/oe-selftest index bc50b2a435..f989e87010 100755 --- a/scripts/oe-selftest +++ b/scripts/oe-selftest | |||
| @@ -36,6 +36,7 @@ sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)) + '/lib') | |||
| 36 | import scriptpath | 36 | import scriptpath |
| 37 | scriptpath.add_bitbake_lib_path() | 37 | scriptpath.add_bitbake_lib_path() |
| 38 | scriptpath.add_oe_lib_path() | 38 | scriptpath.add_oe_lib_path() |
| 39 | import argparse_oe | ||
| 39 | 40 | ||
| 40 | import oeqa.selftest | 41 | import oeqa.selftest |
| 41 | import oeqa.utils.ftools as ftools | 42 | import oeqa.utils.ftools as ftools |
| @@ -65,7 +66,7 @@ log = logger_create() | |||
| 65 | 66 | ||
| 66 | def get_args_parser(): | 67 | def get_args_parser(): |
| 67 | description = "Script that runs unit tests agains bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information." | 68 | description = "Script that runs unit tests agains bitbake and other Yocto related tools. The goal is to validate tools functionality and metadata integrity. Refer to https://wiki.yoctoproject.org/wiki/Oe-selftest for more information." |
| 68 | parser = argparse.ArgumentParser(description=description) | 69 | parser = argparse_oe.ArgumentParser(description=description) |
| 69 | group = parser.add_mutually_exclusive_group(required=True) | 70 | group = parser.add_mutually_exclusive_group(required=True) |
| 70 | group.add_argument('--run-tests', required=False, action='store', nargs='*', dest="run_tests", default=None, help='Select what tests to run (modules, classes or test methods). Format should be: <module>.<class>.<test_method>') | 71 | group.add_argument('--run-tests', required=False, action='store', nargs='*', dest="run_tests", default=None, help='Select what tests to run (modules, classes or test methods). Format should be: <module>.<class>.<test_method>') |
| 71 | group.add_argument('--run-all-tests', required=False, action="store_true", dest="run_all_tests", default=False, help='Run all (unhidden) tests') | 72 | group.add_argument('--run-all-tests', required=False, action="store_true", dest="run_all_tests", default=False, help='Run all (unhidden) tests') |
diff --git a/scripts/recipetool b/scripts/recipetool index 791a66aaca..1198cc25d7 100755 --- a/scripts/recipetool +++ b/scripts/recipetool | |||
| @@ -27,6 +27,7 @@ scripts_path = os.path.dirname(os.path.realpath(__file__)) | |||
| 27 | lib_path = scripts_path + '/lib' | 27 | lib_path = scripts_path + '/lib' |
| 28 | sys.path = sys.path + [lib_path] | 28 | sys.path = sys.path + [lib_path] |
| 29 | import scriptutils | 29 | import scriptutils |
| 30 | import argparse_oe | ||
| 30 | logger = scriptutils.logger_create('recipetool') | 31 | logger = scriptutils.logger_create('recipetool') |
| 31 | 32 | ||
| 32 | plugins = [] | 33 | plugins = [] |
| @@ -45,9 +46,9 @@ def main(): | |||
| 45 | logger.error("This script can only be run after initialising the build environment (e.g. by using oe-init-build-env)") | 46 | logger.error("This script can only be run after initialising the build environment (e.g. by using oe-init-build-env)") |
| 46 | sys.exit(1) | 47 | sys.exit(1) |
| 47 | 48 | ||
| 48 | parser = argparse.ArgumentParser(description="OpenEmbedded recipe tool", | 49 | parser = argparse_oe.ArgumentParser(description="OpenEmbedded recipe tool", |
| 49 | add_help=False, | 50 | add_help=False, |
| 50 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") | 51 | epilog="Use %(prog)s <subcommand> --help to get help on a specific command") |
| 51 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') | 52 | parser.add_argument('-d', '--debug', help='Enable debug output', action='store_true') |
| 52 | parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') | 53 | parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') |
| 53 | parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR') | 54 | parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR') |
diff --git a/scripts/send-error-report b/scripts/send-error-report index 1a1b96580d..a29feff325 100755 --- a/scripts/send-error-report +++ b/scripts/send-error-report | |||
| @@ -15,6 +15,10 @@ import subprocess | |||
| 15 | import argparse | 15 | import argparse |
| 16 | import logging | 16 | import logging |
| 17 | 17 | ||
| 18 | scripts_lib_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib') | ||
| 19 | sys.path.insert(0, scripts_lib_path) | ||
| 20 | import argparse_oe | ||
| 21 | |||
| 18 | version = "0.3" | 22 | version = "0.3" |
| 19 | 23 | ||
| 20 | log = logging.getLogger("send-error-report") | 24 | log = logging.getLogger("send-error-report") |
| @@ -143,7 +147,7 @@ def send_data(data, args): | |||
| 143 | 147 | ||
| 144 | 148 | ||
| 145 | if __name__ == '__main__': | 149 | if __name__ == '__main__': |
| 146 | arg_parse = argparse.ArgumentParser(description="This scripts will send an error report to your specified error-report-web server.") | 150 | arg_parse = argparse_oe.ArgumentParser(description="This scripts will send an error report to your specified error-report-web server.") |
| 147 | 151 | ||
| 148 | arg_parse.add_argument("error_file", | 152 | arg_parse.add_argument("error_file", |
| 149 | help="Generated error report file location", | 153 | help="Generated error report file location", |
diff --git a/scripts/test-remote-image b/scripts/test-remote-image index f3a44ebe51..97d03d7a78 100755 --- a/scripts/test-remote-image +++ b/scripts/test-remote-image | |||
| @@ -38,6 +38,7 @@ lib_path = scripts_path + '/lib' | |||
| 38 | sys.path = sys.path + [lib_path] | 38 | sys.path = sys.path + [lib_path] |
| 39 | 39 | ||
| 40 | import scriptpath | 40 | import scriptpath |
| 41 | import argparse_oe | ||
| 41 | 42 | ||
| 42 | # Add meta/lib to sys.path | 43 | # Add meta/lib to sys.path |
| 43 | scriptpath.add_oe_lib_path() | 44 | scriptpath.add_oe_lib_path() |
| @@ -82,7 +83,7 @@ log = logger_create() | |||
| 82 | # Define and return the arguments parser for the script | 83 | # Define and return the arguments parser for the script |
| 83 | def get_args_parser(): | 84 | def get_args_parser(): |
| 84 | description = "This script is used to run automated runtime tests using remotely published image files. You should prepare the build environment just like building local images and running the tests." | 85 | description = "This script is used to run automated runtime tests using remotely published image files. You should prepare the build environment just like building local images and running the tests." |
| 85 | parser = argparse.ArgumentParser(description=description) | 86 | parser = argparse_oe.ArgumentParser(description=description) |
| 86 | parser.add_argument('--image-types', required=True, action="store", nargs='*', dest="image_types", default=None, help='The image types to test(ex: core-image-minimal).') | 87 | parser.add_argument('--image-types', required=True, action="store", nargs='*', dest="image_types", default=None, help='The image types to test(ex: core-image-minimal).') |
| 87 | parser.add_argument('--repo-link', required=True, action="store", type=str, dest="repo_link", default=None, help='The link to the remote images repository.') | 88 | parser.add_argument('--repo-link', required=True, action="store", type=str, dest="repo_link", default=None, help='The link to the remote images repository.') |
| 88 | parser.add_argument('--required-packages', required=False, action="store", nargs='*', dest="required_packages", default=None, help='Required packages for the tests. They will be built before the testing begins.') | 89 | parser.add_argument('--required-packages', required=False, action="store", nargs='*', dest="required_packages", default=None, help='Required packages for the tests. They will be built before the testing begins.') |
