summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
authorJerin Peter George <jerinpetergeorge@gmail.com>2020-07-04 05:26:00 +0530
committerGitHub <noreply@github.com>2020-07-03 19:56:00 -0400
commitba7e1db306b5a7f4cb699de90913c7dd8838018f (patch)
tree6926cd002881d3a277b361e8f8d21334797ac3fb /coverage
parentf28b1dba5d8359029f5f491fec207c10097baf10 (diff)
downloadpython-coveragepy-git-ba7e1db306b5a7f4cb699de90913c7dd8838018f.tar.gz
Report descending sort option (#1005)
* added descending sort option in coverage report * commandline option for report sort added * Fix tests for pull #1005 * conditional statements improved * sort option help updated with choices * commandline test for sort added Co-authored-by: Ned Batchelder <ned@nedbatchelder.com>
Diffstat (limited to 'coverage')
-rw-r--r--coverage/cmdline.py8
-rw-r--r--coverage/config.py1
-rw-r--r--coverage/control.py3
-rw-r--r--coverage/summary.py12
4 files changed, 21 insertions, 3 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index 059d42a2..f7c82864 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -85,6 +85,11 @@ class Opts(object):
"which isn't done by default."
),
)
+ sort = optparse.make_option(
+ '--sort', action='store', metavar='COLUMN',
+ help="Sort the report by the named column: name, stmts, miss, branch, brpart, or cover. "
+ "Default is name."
+ )
show_missing = optparse.make_option(
'-m', '--show-missing', action='store_true',
help="Show line numbers of statements in each module that weren't executed.",
@@ -221,6 +226,7 @@ class CoverageOptionParser(optparse.OptionParser, object):
skip_covered=None,
skip_empty=None,
show_contexts=None,
+ sort=None,
source=None,
timid=None,
title=None,
@@ -410,6 +416,7 @@ CMDS = {
Opts.include,
Opts.omit,
Opts.precision,
+ Opts.sort,
Opts.show_missing,
Opts.skip_covered,
Opts.no_skip_covered,
@@ -601,6 +608,7 @@ class CoverageScript(object):
skip_covered=options.skip_covered,
skip_empty=options.skip_empty,
precision=options.precision,
+ sort=options.sort,
**report_args
)
elif options.action == "annotate":
diff --git a/coverage/config.py b/coverage/config.py
index 6d336d1f..84d9758b 100644
--- a/coverage/config.py
+++ b/coverage/config.py
@@ -211,6 +211,7 @@ class CoverageConfig(object):
self.show_missing = False
self.skip_covered = False
self.skip_empty = False
+ self.sort = None
# Defaults for [html]
self.extra_css = None
diff --git a/coverage/control.py b/coverage/control.py
index bd7ba2e6..cc0c271a 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -831,7 +831,7 @@ class Coverage(object):
def report(
self, morfs=None, show_missing=None, ignore_errors=None,
file=None, omit=None, include=None, skip_covered=None,
- contexts=None, skip_empty=None, precision=None,
+ contexts=None, skip_empty=None, precision=None, sort=None
):
"""Write a textual summary report to `file`.
@@ -882,6 +882,7 @@ class Coverage(object):
ignore_errors=ignore_errors, report_omit=omit, report_include=include,
show_missing=show_missing, skip_covered=skip_covered,
report_contexts=contexts, skip_empty=skip_empty, precision=precision,
+ sort=sort
):
reporter = SummaryReporter(self)
return reporter.report(morfs, outfile=file)
diff --git a/coverage/summary.py b/coverage/summary.py
index 97d9fff0..986cd2f2 100644
--- a/coverage/summary.py
+++ b/coverage/summary.py
@@ -104,10 +104,18 @@ class SummaryReporter(object):
# Sort the lines and write them out.
if getattr(self.config, 'sort', None):
- position = column_order.get(self.config.sort.lower())
+ sort_option = self.config.sort.lower()
+ reverse = False
+ if sort_option[0] == '-':
+ reverse = True
+ sort_option = sort_option[1:]
+ elif sort_option[0] == '+':
+ sort_option = sort_option[1:]
+
+ position = column_order.get(sort_option)
if position is None:
raise CoverageException("Invalid sorting option: {!r}".format(self.config.sort))
- lines.sort(key=lambda l: (l[1][position], l[0]))
+ lines.sort(key=lambda l: (l[1][position], l[0]), reverse=reverse)
for line in lines:
self.writeout(line[0])