summaryrefslogtreecommitdiff
path: root/coverage/control.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2019-11-17 07:52:24 -0500
committerNed Batchelder <ned@nedbatchelder.com>2019-12-01 08:35:04 -0500
commit013e9de08c0747fddf92cc1fdac1d1f39185aa3b (patch)
treeada87dee565d5b167e424df6d9143ec49de349fa /coverage/control.py
parent10e41ab0dc165b3fd010345ab0fb1ed319d2f230 (diff)
downloadpython-coveragepy-git-013e9de08c0747fddf92cc1fdac1d1f39185aa3b.tar.gz
Experimental: relative_files to support relative file names.
Diffstat (limited to 'coverage/control.py')
-rw-r--r--coverage/control.py14
1 files changed, 9 insertions, 5 deletions
diff --git a/coverage/control.py b/coverage/control.py
index 0f306aa2..3a19695a 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -20,7 +20,7 @@ from coverage.context import should_start_context_test_function, combine_context
from coverage.data import CoverageData, combine_parallel_data
from coverage.debug import DebugControl, write_formatted_info
from coverage.disposition import disposition_debug_msg
-from coverage.files import PathAliases, set_relative_directory, abs_file
+from coverage.files import PathAliases, abs_file, relative_filename, set_relative_directory
from coverage.html import HtmlReporter
from coverage.inorout import InOrOut
from coverage.jsonreport import JsonReporter
@@ -198,6 +198,7 @@ class Coverage(object):
self._data_suffix = self._run_suffix = None
self._exclude_re = None
self._debug = None
+ self._file_mapper = None
# State machine variables:
# Have we initialized everything?
@@ -238,6 +239,7 @@ class Coverage(object):
self._exclude_re = {}
set_relative_directory()
+ self._file_mapper = relative_filename if self.config.relative_files else abs_file
# Load plugins
self._plugins = Plugins.load_plugins(self.config.plugins, self.config, self._debug)
@@ -405,6 +407,7 @@ class Coverage(object):
should_trace=self._should_trace,
check_include=self._check_include_omit_etc,
should_start_context=should_start_context,
+ file_mapper=self._file_mapper,
timid=self.config.timid,
branch=self.config.branch,
warn=self._warn,
@@ -671,6 +674,7 @@ class Coverage(object):
# mark completely unexecuted files as 0% covered.
if self._data:
for file_path, plugin_name in self._inorout.find_possibly_unexecuted_files():
+ file_path = self._file_mapper(file_path)
self._data.touch_file(file_path, plugin_name)
if self.config.note:
@@ -723,7 +727,7 @@ class Coverage(object):
if not isinstance(it, FileReporter):
it = self._get_file_reporter(it)
- return Analysis(data, it)
+ return Analysis(data, it, self._file_mapper)
def _get_file_reporter(self, morf):
"""Get a FileReporter for a module or file name."""
@@ -731,13 +735,13 @@ class Coverage(object):
file_reporter = "python"
if isinstance(morf, string_class):
- abs_morf = abs_file(morf)
- plugin_name = self._data.file_tracer(abs_morf)
+ mapped_morf = self._file_mapper(morf)
+ plugin_name = self._data.file_tracer(mapped_morf)
if plugin_name:
plugin = self._plugins.get(plugin_name)
if plugin:
- file_reporter = plugin.file_reporter(abs_morf)
+ file_reporter = plugin.file_reporter(mapped_morf)
if file_reporter is None:
raise CoverageException(
"Plugin %r did not provide a file reporter for %r." % (