From 8d622d2b2a73e7805ed09804656f2258a0d5273f Mon Sep 17 00:00:00 2001 From: Ben Finney Date: Thu, 15 Oct 2015 13:25:57 +1100 Subject: Derive command name from command-line arguments. The command name is determined by the command-line used to invoke the program, and should not be hard-coded in messages. Derive it from the command-line arguments. --- coverage/cmdline.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) (limited to 'coverage/cmdline.py') diff --git a/coverage/cmdline.py b/coverage/cmdline.py index 46a87ca6..94bb75f2 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -142,6 +142,8 @@ class CoverageOptionParser(optparse.OptionParser, object): """ + program_name = os.path.basename(sys.argv[0]) + def __init__(self, *args, **kwargs): super(CoverageOptionParser, self).__init__( add_help_option=False, *args, **kwargs @@ -228,7 +230,7 @@ class CmdOptionParser(CoverageOptionParser): if usage: usage = "%prog " + usage super(CmdOptionParser, self).__init__( - prog="coverage %s" % action, + prog="%(program_name)s %s" % action, usage=usage, description=description, ) @@ -523,13 +525,17 @@ class CoverageScript(object): assert error or topic or parser if error: print(error) - print("Use 'coverage help' for help.") + print("Use '%(program_name)s help' for help." % { + 'program_name': parser.program_name}) elif parser: print(parser.format_help().strip()) else: + help_params = self.covpkg.__dict__ + help_params.update({ + 'program_name': CoverageOptionParser.program_name}) help_msg = textwrap.dedent(HELP_TOPICS.get(topic, '')).strip() if help_msg: - print(help_msg % self.covpkg.__dict__) + print(help_msg % help_params) else: print("Don't know topic %r" % topic) @@ -682,7 +688,7 @@ HELP_TOPICS = { Coverage.py, version %(__version__)s Measure, collect, and report on code coverage in Python programs. - usage: coverage [options] [args] + usage: %(program_name)s [options] [args] Commands: annotate Annotate source files with execution information. @@ -694,12 +700,12 @@ HELP_TOPICS = { run Run a Python program and measure code execution. xml Create an XML report of coverage results. - Use "coverage help " for detailed help on any command. + Use "%(program_name)s help " for detailed help on any command. For full documentation, see %(__url__)s """, 'minimum_help': """\ - Code coverage for Python. Use 'coverage help' for help. + Code coverage for Python. Use '%(program_name)s help' for help. """, 'version': """\ -- cgit v1.2.1 From 39683d80f2aea8412b805aa71a41e625c388b223 Mon Sep 17 00:00:00 2001 From: Ben Finney Date: Sun, 18 Oct 2015 12:58:20 +1100 Subject: =?UTF-8?q?Override=20program=20name=20only=20for=20=E2=80=98CmdOp?= =?UTF-8?q?tionParser=E2=80=99=20instances.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We only need to append the sub-command, so we shouldn't override the actual command. Get the command from the superclass. --- coverage/cmdline.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'coverage/cmdline.py') diff --git a/coverage/cmdline.py b/coverage/cmdline.py index 94bb75f2..308dbacc 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -230,7 +230,6 @@ class CmdOptionParser(CoverageOptionParser): if usage: usage = "%prog " + usage super(CmdOptionParser, self).__init__( - prog="%(program_name)s %s" % action, usage=usage, description=description, ) @@ -244,6 +243,15 @@ class CmdOptionParser(CoverageOptionParser): # results, and they will compare equal to objects. return (other == "" % self.cmd) + def get_prog_name(self): + program_name = super(CmdOptionParser, self).get_prog_name() + + # Include the sub-command for this parser as part of the command. + result = "%(command)s %(subcommand)s" % { + 'command': program_name, 'subcommand': self.cmd} + return result + + GLOBAL_ARGS = [ Opts.debug, Opts.help, -- cgit v1.2.1 From 420db239e290401c3ddbf4bcde52708f53d830b5 Mon Sep 17 00:00:00 2001 From: Ben Finney Date: Sun, 18 Oct 2015 12:59:28 +1100 Subject: Move program name attribute to the application class. --- coverage/cmdline.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'coverage/cmdline.py') diff --git a/coverage/cmdline.py b/coverage/cmdline.py index 308dbacc..97ea596c 100644 --- a/coverage/cmdline.py +++ b/coverage/cmdline.py @@ -142,8 +142,6 @@ class CoverageOptionParser(optparse.OptionParser, object): """ - program_name = os.path.basename(sys.argv[0]) - def __init__(self, *args, **kwargs): super(CoverageOptionParser, self).__init__( add_help_option=False, *args, **kwargs @@ -382,6 +380,8 @@ OK, ERR, FAIL_UNDER = 0, 1, 2 class CoverageScript(object): """The command-line interface to coverage.py.""" + program_name = os.path.basename(sys.argv[0]) + def __init__(self, _covpkg=None, _run_python_file=None, _run_python_module=None, _help_fn=None, _path_exists=None): # _covpkg is for dependency injection, so we can test this code. @@ -534,13 +534,13 @@ class CoverageScript(object): if error: print(error) print("Use '%(program_name)s help' for help." % { - 'program_name': parser.program_name}) + 'program_name': self.program_name}) elif parser: print(parser.format_help().strip()) else: help_params = self.covpkg.__dict__ help_params.update({ - 'program_name': CoverageOptionParser.program_name}) + 'program_name': self.program_name}) help_msg = textwrap.dedent(HELP_TOPICS.get(topic, '')).strip() if help_msg: print(help_msg % help_params) -- cgit v1.2.1