nmbug: Add a 'help' command for folks who don't like --help

The 'if args.func == help' block at the end avoids:

    AttributeError: 'functools.partial' object has no attribute '__code__'
This commit is contained in:
W. Trevor King 2014-10-03 11:20:58 -07:00 committed by David Bremner
parent 62bc1d4717
commit 9d25c97d8b

View file

@ -32,6 +32,7 @@ from __future__ import unicode_literals
import codecs as _codecs import codecs as _codecs
import collections as _collections import collections as _collections
import functools as _functools
import inspect as _inspect import inspect as _inspect
import locale as _locale import locale as _locale
import logging as _logging import logging as _logging
@ -677,6 +678,24 @@ def _unpack_diff_lines(stream):
yield (id, tag) yield (id, tag)
def _help(parser, command=None):
"""
Show help for an nmbug command.
Because some folks prefer:
$ nmbug help COMMAND
to
$ nmbug COMMAND --help
"""
if command:
parser.parse_args([command, '--help'])
else:
parser.parse_args(['--help'])
if __name__ == '__main__': if __name__ == '__main__':
import argparse import argparse
@ -692,6 +711,8 @@ if __name__ == '__main__':
help='Log verbosity. Defaults to {!r}.'.format( help='Log verbosity. Defaults to {!r}.'.format(
_logging.getLevelName(_LOG.level).lower())) _logging.getLevelName(_LOG.level).lower()))
help = _functools.partial(_help, parser=parser)
help.__doc__ = _help.__doc__
subparsers = parser.add_subparsers( subparsers = parser.add_subparsers(
title='commands', title='commands',
description=( description=(
@ -703,6 +724,7 @@ if __name__ == '__main__':
'clone', 'clone',
'commit', 'commit',
'fetch', 'fetch',
'help',
'log', 'log',
'merge', 'merge',
'pull', 'pull',
@ -746,6 +768,10 @@ if __name__ == '__main__':
'Override the default configured in branch.<name>.remote ' 'Override the default configured in branch.<name>.remote '
'to fetch from a particular remote repository (e.g. ' 'to fetch from a particular remote repository (e.g. '
"'origin').")) "'origin')."))
elif command == 'help':
subparser.add_argument(
'command', metavar='COMMAND', nargs='?',
help='The command to show help for.')
elif command == 'log': elif command == 'log':
subparser.add_argument( subparser.add_argument(
'args', metavar='ARG', nargs='*', 'args', metavar='ARG', nargs='*',
@ -796,7 +822,10 @@ if __name__ == '__main__':
parser.print_usage() parser.print_usage()
_sys.exit(1) _sys.exit(1)
(arg_names, varargs, varkw) = _inspect.getargs(args.func.__code__) if args.func == help:
arg_names = ['command']
else:
(arg_names, varargs, varkw) = _inspect.getargs(args.func.__code__)
kwargs = {key: getattr(args, key) for key in arg_names if key in args} kwargs = {key: getattr(args, key) for key in arg_names if key in args}
try: try:
args.func(**kwargs) args.func(**kwargs)