gerrit: move command parsing into argparse
This makes the CLI parsing a bit more clear and standard.
BUG=None
TEST=`gerrit todo` still works
Change-Id: I2a9a24a2dc40a9091e6425920b471fa7f7ab6fff
Reviewed-on: https://chromium-review.googlesource.com/1089410
Commit-Ready: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
Reviewed-by: Lann Martin <lannm@chromium.org>
diff --git a/scripts/gerrit.py b/scripts/gerrit.py
index ec9a134..ddbf626 100644
--- a/scripts/gerrit.py
+++ b/scripts/gerrit.py
@@ -567,7 +567,8 @@
help='Limit output to the specific project')
parser.add_argument('-t', '--topic',
help='Limit output to the specific topic')
- parser.add_argument('args', nargs='+')
+ parser.add_argument('action', help='The gerrit action to perform')
+ parser.add_argument('args', nargs='*', help='Action arguments')
opts = parser.parse_args(argv)
# A cache of gerrit helpers we'll load on demand.
@@ -579,23 +580,21 @@
COLOR = terminal.Color(enabled=opts.color)
# Now look up the requested user action and run it.
- cmd = opts.args[0].lower()
- args = opts.args[1:]
- functor = globals().get(act_pfx + cmd.capitalize())
+ functor = globals().get(act_pfx + opts.action.capitalize())
if functor:
argspec = inspect.getargspec(functor)
if argspec.varargs:
arg_min = getattr(functor, 'arg_min', len(argspec.args))
- if len(args) < arg_min:
+ if len(opts.args) < arg_min:
parser.error('incorrect number of args: %s expects at least %s' %
- (cmd, arg_min))
- elif len(argspec.args) - 1 != len(args):
+ (opts.action, arg_min))
+ elif len(argspec.args) - 1 != len(opts.args):
parser.error('incorrect number of args: %s expects %s' %
- (cmd, len(argspec.args) - 1))
+ (opts.action, len(argspec.args) - 1))
try:
- functor(opts, *args)
+ functor(opts, *opts.args)
except (cros_build_lib.RunCommandError, gerrit.GerritException,
gob_util.GOBError) as e:
cros_build_lib.Die(e.message)
else:
- parser.error('unknown action: %s' % (cmd,))
+ parser.error('unknown action: %s' % (opts.action,))