diff --git a/gitinspector/gitinspector.py b/gitinspector/gitinspector.py index 8537f51..af9b150 100755 --- a/gitinspector/gitinspector.py +++ b/gitinspector/gitinspector.py @@ -108,7 +108,7 @@ def __handle_version__(__option__, __opt_str__, __value__, __parser__): sys.exit(0) def main(): - parser = optparse.OptionParser(add_help_option=False) + parser = optval.OptionParser(add_help_option=False) try: parser.add_option("-c", action="store_true", dest="checkout_missing") @@ -145,8 +145,9 @@ def main(): #We need the repo above to be set before we read the git config. config.init(__run__) - except (format.InvalidFormatError, optval.InvalidOptionArgument) as msg: - print(sys.argv[0], "\b:", unicode(msg)) + except (format.InvalidFormatError, optval.InvalidOptionArgument, optval.OptionParsingError) as msg: + print(sys.argv[0], "\b:", end=" ") + print(msg) print(_("Try `{0} --help' for more information.").format(sys.argv[0])) sys.exit(2) diff --git a/gitinspector/optval.py b/gitinspector/optval.py index 3876f59..a0b2cdd 100644 --- a/gitinspector/optval.py +++ b/gitinspector/optval.py @@ -18,11 +18,15 @@ from __future__ import unicode_literals +import optparse import sys class InvalidOptionArgument(Exception): pass +class OptionParsingError(RuntimeError): + pass + def __handle_boolean_argument__(option, __opt_str__, value, parser, *__args__, **kwargs): if isinstance(value, bool): return value @@ -59,3 +63,17 @@ def add_option(parser, *args, **kwargs): sys.argv.insert(i + 1, "true") parser.add_option(*args, **kwargs) + +class OptionParser(optparse.OptionParser): + def error(self, msg): + if msg.find("requires") != -1: + variable = msg.split()[0] + raise OptionParsingError(_("option '{0}' requires an argument").format(variable)) + else: + variable = msg.split()[-1] + if variable[1] == "-": + raise OptionParsingError("unrecognized option '{0}'".format(variable)) + else: + raise OptionParsingError("invalid option -- '{0}'".format(variable[1:])) + + raise OptionParsingError("invalid command-line options")