Auto merge of #7838 - mbrubeck:mach-up, r=mbrubeck

Upgrade to latest mach from mozilla-central

r? @jgraham

<!-- Reviewable:start -->
[<img src="https://reviewable.io/review_button.png" height=40 alt="Review on Reviewable"/>](https://reviewable.io/reviews/servo/servo/7838)
<!-- Reviewable:end -->
This commit is contained in:
bors-servo 2015-10-02 17:01:04 -06:00
commit e40dd3843f
2 changed files with 25 additions and 6 deletions

View file

@ -92,7 +92,6 @@ class CommandAction(argparse.Action):
elif values: elif values:
command = values[0].lower() command = values[0].lower()
args = values[1:] args = values[1:]
if command == 'help': if command == 'help':
if args and args[0] not in ['-h', '--help']: if args and args[0] not in ['-h', '--help']:
# Make sure args[0] is indeed a command. # Make sure args[0] is indeed a command.
@ -102,8 +101,17 @@ class CommandAction(argparse.Action):
sys.exit(0) sys.exit(0)
elif '-h' in args or '--help' in args: elif '-h' in args or '--help' in args:
# -h or --help is in the command arguments. # -h or --help is in the command arguments.
if '--' in args:
# -- is in command arguments
if '-h' in args[:args.index('--')] or '--help' in args[:args.index('--')]:
# Honor -h or --help only if it appears before --
self._handle_command_help(parser, command) self._handle_command_help(parser, command)
sys.exit(0) sys.exit(0)
else:
self._handle_command_help(parser, command)
sys.exit(0)
else: else:
raise NoCommandError() raise NoCommandError()
@ -172,14 +180,20 @@ class CommandAction(argparse.Action):
'usage': usage, 'usage': usage,
} }
remainder = None
if handler.parser: if handler.parser:
subparser = handler.parser subparser = handler.parser
subparser.context = self._context subparser.context = self._context
for arg in subparser._actions[:]:
if arg.nargs == argparse.REMAINDER:
subparser._actions.remove(arg)
remainder = (arg.dest,), {'default': arg.default,
'nargs': arg.nargs,
'help': arg.help}
else: else:
subparser = argparse.ArgumentParser(**parser_args) subparser = argparse.ArgumentParser(**parser_args)
remainder = None
for arg in handler.arguments: for arg in handler.arguments:
# Remove our group keyword; it's not needed here. # Remove our group keyword; it's not needed here.
group_name = arg[1].get('group') group_name = arg[1].get('group')
@ -230,7 +244,7 @@ class CommandAction(argparse.Action):
setattr(command_namespace, name, extra) setattr(command_namespace, name, extra)
else: else:
setattr(command_namespace, name, options.get('default', [])) setattr(command_namespace, name, options.get('default', []))
elif extra: elif extra and handler.cls.__name__ != 'DeprecatedCommands':
raise UnrecognizedArgumentError(command, extra) raise UnrecognizedArgumentError(command, extra)
def _handle_main_help(self, parser, verbose): def _handle_main_help(self, parser, verbose):

View file

@ -61,6 +61,11 @@ class MachRegistrar(object):
if handler.pass_context and not context: if handler.pass_context and not context:
raise Exception('mach command class requires context.') raise Exception('mach command class requires context.')
if context:
prerun = getattr(context, 'pre_dispatch_handler', None)
if prerun:
prerun(context, handler, args=kwargs)
if handler.pass_context: if handler.pass_context:
instance = cls(context) instance = cls(context)
else: else: