summaryrefslogtreecommitdiff
path: root/coverage/cmdline.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2021-11-13 08:09:19 -0500
committerNed Batchelder <ned@nedbatchelder.com>2021-11-13 12:33:11 -0500
commit5ca980dabd71aa74d90351a6d4e88cf101d65ded (patch)
treefbc48740076572aaf3a55c1405d40665ead83434 /coverage/cmdline.py
parent9a72bf4bc964bc8062627d6ecd6fb8c8d1e5dec6 (diff)
downloadpython-coveragepy-git-5ca980dabd71aa74d90351a6d4e88cf101d65ded.tar.gz
feat: 'debug data' now enumerates combinable files also
Diffstat (limited to 'coverage/cmdline.py')
-rw-r--r--coverage/cmdline.py48
1 files changed, 29 insertions, 19 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index e996ffff..f3a466e3 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -17,7 +17,7 @@ import coverage
from coverage import Coverage
from coverage import env
from coverage.collector import CTracer
-from coverage.data import line_counts
+from coverage.data import CoverageData, combinable_files, line_counts
from coverage.debug import info_formatter, info_header, short_stack
from coverage.exceptions import BaseCoverageException, ExceptionDuringRun, NoSource
from coverage.execfile import PyRunner
@@ -601,8 +601,8 @@ class CoverageScript:
elif options.action == "combine":
if options.append:
self.coverage.load()
- data_dirs = args or None
- self.coverage.combine(data_dirs, strict=True, keep=bool(options.keep))
+ data_paths = args or None
+ self.coverage.combine(data_paths, strict=True, keep=bool(options.keep))
self.coverage.save()
return OK
@@ -786,23 +786,12 @@ class CoverageScript:
for line in info_formatter(sys_info):
print(f" {line}")
elif info == 'data':
- self.coverage.load()
- data = self.coverage.get_data()
print(info_header("data"))
- print(f"path: {data.data_filename()}")
- if data:
- print(f"has_arcs: {data.has_arcs()!r}")
- summary = line_counts(data, fullpath=True)
- filenames = human_sorted(summary.keys())
- print(f"\n{len(filenames)} files:")
- for f in filenames:
- line = f"{f}: {summary[f]} lines"
- plugin = data.file_tracer(f)
- if plugin:
- line += f" [{plugin}]"
- print(line)
- else:
- print("No data collected")
+ data_file = self.coverage.config.data_file
+ self.do_debug_data_file(data_file)
+ for filename in combinable_files(data_file):
+ print("-----")
+ self.do_debug_data_file(filename)
elif info == 'config':
print(info_header("config"))
config_info = self.coverage.config.__dict__.items()
@@ -817,6 +806,27 @@ class CoverageScript:
return OK
+ def do_debug_data_file(self, filename):
+ """Implementation of 'coverage debug data'."""
+ data = CoverageData(filename)
+ filename = data.data_filename()
+ print(f"path: {filename}")
+ if not os.path.exists(filename):
+ print("No data collected: file doesn't exist")
+ return
+ data.read()
+ print(f"has_arcs: {data.has_arcs()!r}")
+ summary = line_counts(data, fullpath=True)
+ filenames = human_sorted(summary.keys())
+ nfiles = len(filenames)
+ print(f"{nfiles} file{'' if nfiles == 1 else 's'}:")
+ for f in filenames:
+ line = f"{f}: {summary[f]} line{'' if summary[f] == 1 else 's'}"
+ plugin = data.file_tracer(f)
+ if plugin:
+ line += f" [{plugin}]"
+ print(line)
+
def unshell_list(s):
"""Turn a command-line argument into a list."""