summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--coverage/collector.py44
-rw-r--r--coverage/control.py16
-rw-r--r--tests/goldtest.py2
-rw-r--r--tests/test_html.py3
-rw-r--r--tests/test_xml.py4
5 files changed, 35 insertions, 34 deletions
diff --git a/coverage/collector.py b/coverage/collector.py
index a032b70d..703f65b8 100644
--- a/coverage/collector.py
+++ b/coverage/collector.py
@@ -389,6 +389,25 @@ class Collector(object):
except KeyError:
return self.abs_file_cache.setdefault(key, abs_file(filename))
+ def abs_file_dict(self, d):
+ """Return a dict like d, but with keys modified by `abs_file`."""
+ # The call to litems() ensures that the GIL protects the dictionary
+ # iterator against concurrent modifications by tracers running
+ # in other threads. We try three times in case of concurrent
+ # access, hoping to get a clean copy.
+ runtime_err = None
+ for _ in range(3):
+ try:
+ items = litems(d)
+ except RuntimeError as ex:
+ runtime_err = ex
+ else:
+ break
+ else:
+ raise runtime_err
+
+ return dict((self.cached_abs_file(k), v) for k, v in items if v)
+
def flush_data(self):
"""Save the collected data to our associated `CoverageData`.
@@ -400,30 +419,11 @@ class Collector(object):
if not self._activity():
return False
- def abs_file_dict(d):
- """Return a dict like d, but with keys modified by `abs_file`."""
- # The call to litems() ensures that the GIL protects the dictionary
- # iterator against concurrent modifications by tracers running
- # in other threads. We try three times in case of concurrent
- # access, hoping to get a clean copy.
- runtime_err = None
- for _ in range(3):
- try:
- items = litems(d)
- except RuntimeError as ex:
- runtime_err = ex
- else:
- break
- else:
- raise runtime_err
-
- return dict((self.cached_abs_file(k), v) for k, v in items if v)
-
if self.branch:
- self.covdata.add_arcs(abs_file_dict(self.data))
+ self.covdata.add_arcs(self.abs_file_dict(self.data))
else:
- self.covdata.add_lines(abs_file_dict(self.data))
- self.covdata.add_file_tracers(abs_file_dict(self.file_tracers))
+ self.covdata.add_lines(self.abs_file_dict(self.data))
+ self.covdata.add_file_tracers(self.abs_file_dict(self.file_tracers))
self._clear_data()
return True
diff --git a/coverage/control.py b/coverage/control.py
index 5282eb59..0f306aa2 100644
--- a/coverage/control.py
+++ b/coverage/control.py
@@ -736,14 +736,14 @@ class Coverage(object):
if plugin_name:
plugin = self._plugins.get(plugin_name)
- if plugin:
- file_reporter = plugin.file_reporter(abs_morf)
- if file_reporter is None:
- raise CoverageException(
- "Plugin %r did not provide a file reporter for %r." % (
- plugin._coverage_plugin_name, morf
- )
- )
+ if plugin:
+ file_reporter = plugin.file_reporter(abs_morf)
+ if file_reporter is None:
+ raise CoverageException(
+ "Plugin %r did not provide a file reporter for %r." % (
+ plugin._coverage_plugin_name, morf
+ )
+ )
if file_reporter == "python":
file_reporter = PythonFileReporter(morf, self)
diff --git a/tests/goldtest.py b/tests/goldtest.py
index b5e32f5f..16301417 100644
--- a/tests/goldtest.py
+++ b/tests/goldtest.py
@@ -12,8 +12,6 @@ import re
import sys
import xml.etree.ElementTree
-from unittest_mixins import change_dir # pylint: disable=unused-import
-
from coverage import env
from tests.coveragetest import TESTS_DIR
diff --git a/tests/test_html.py b/tests/test_html.py
index 74cc15d9..504c5e80 100644
--- a/tests/test_html.py
+++ b/tests/test_html.py
@@ -13,6 +13,7 @@ import re
import sys
import mock
+from unittest_mixins import change_dir
import coverage
from coverage.backward import unicode_class
@@ -24,7 +25,7 @@ from coverage.report import get_analysis_to_report
from tests.coveragetest import CoverageTest, TESTS_DIR
from tests.goldtest import gold_path
-from tests.goldtest import change_dir, compare, contains, doesnt_contain, contains_any
+from tests.goldtest import compare, contains, doesnt_contain, contains_any
class HtmlTestHelpers(CoverageTest):
diff --git a/tests/test_xml.py b/tests/test_xml.py
index 658a6ab6..25c9ee0c 100644
--- a/tests/test_xml.py
+++ b/tests/test_xml.py
@@ -9,12 +9,14 @@ import os.path
import re
from xml.etree import ElementTree
+from unittest_mixins import change_dir
+
import coverage
from coverage.backward import import_local_file
from coverage.files import abs_file
from tests.coveragetest import CoverageTest
-from tests.goldtest import change_dir, compare, gold_path
+from tests.goldtest import compare, gold_path
class XmlTestHelpers(CoverageTest):