mirror of
https://gerrit.googlesource.com/git-repo
synced 2026-01-12 01:20:26 +00:00
forall: fix crash with no command
When callback= is used, optparse does not automatically initialize The destination when a dest= is not specified. Refine the test to allow dest= options when callback= is used even when it seems like it is otherwise redundant. Bug: b/436611422 Change-Id: I5185f95cb857ca6d37357cac77fb117a83db9c0c Reviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/509861 Tested-by: Mike Frysinger <vapier@google.com> Commit-Queue: Mike Frysinger <vapier@google.com> Reviewed-by: Gavin Mak <gavinmak@google.com>
This commit is contained in:
@@ -133,7 +133,7 @@ without iterating through the remaining projects.
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def _cmd_option(option, _opt_str, _value, parser):
|
def _cmd_option(option, _opt_str, _value, parser):
|
||||||
setattr(parser.values, option.dest or "command", list(parser.rargs))
|
setattr(parser.values, option.dest, list(parser.rargs))
|
||||||
while parser.rargs:
|
while parser.rargs:
|
||||||
del parser.rargs[0]
|
del parser.rargs[0]
|
||||||
|
|
||||||
@@ -161,6 +161,7 @@ without iterating through the remaining projects.
|
|||||||
p.add_option(
|
p.add_option(
|
||||||
"-c",
|
"-c",
|
||||||
"--command",
|
"--command",
|
||||||
|
dest="command",
|
||||||
help="command (and arguments) to execute",
|
help="command (and arguments) to execute",
|
||||||
action="callback",
|
action="callback",
|
||||||
callback=self._cmd_option,
|
callback=self._cmd_option,
|
||||||
|
|||||||
@@ -94,7 +94,12 @@ class AllCommands(unittest.TestCase):
|
|||||||
"""Block redundant dest= arguments."""
|
"""Block redundant dest= arguments."""
|
||||||
|
|
||||||
def _check_dest(opt):
|
def _check_dest(opt):
|
||||||
if opt.dest is None or not opt._long_opts:
|
"""Check the dest= setting."""
|
||||||
|
# If the destination is not set, nothing to check.
|
||||||
|
# If long options are not set, then there's no implicit destination.
|
||||||
|
# If callback is used, then a destination might be needed because
|
||||||
|
# optparse cannot assume a value is always stored.
|
||||||
|
if opt.dest is None or not opt._long_opts or opt.callback:
|
||||||
return
|
return
|
||||||
|
|
||||||
long = opt._long_opts[0]
|
long = opt._long_opts[0]
|
||||||
|
|||||||
Reference in New Issue
Block a user