diff options
Diffstat (limited to 'coverage/data.py')
-rw-r--r-- | coverage/data.py | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/coverage/data.py b/coverage/data.py index 95b68881..ecfb86b9 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -144,9 +144,6 @@ class CoverageData(object): # A list of dicts of information about the coverage.py runs. self._runs = [] - if self._debug and self._debug.should('dataio'): - self._debug.write("Creating CoverageData object") - def __repr__(self): return "<{klass} lines={lines} arcs={arcs} tracers={tracers} runs={runs}>".format( klass=self.__class__.__name__, @@ -419,8 +416,12 @@ class CoverageData(object): self._runs[0].update(kwargs) self._validate() - def touch_file(self, filename): - """Ensure that `filename` appears in the data, empty if needed.""" + def touch_file(self, filename, plugin_name=""): + """Ensure that `filename` appears in the data, empty if needed. + + `plugin_name` is the name of the plugin resposible for this file. It is used + to associate the right filereporter, etc. + """ if self._debug and self._debug.should('dataop'): self._debug.write("Touching %r" % (filename,)) if not self._has_arcs() and not self._has_lines(): @@ -431,6 +432,9 @@ class CoverageData(object): else: where = self._lines where.setdefault(filename, []) + if plugin_name: + # Set the tracer for this file + self._file_tracers[filename] = plugin_name self._validate() @@ -608,15 +612,19 @@ class CoverageData(object): class CoverageDataFiles(object): """Manage the use of coverage data files.""" - def __init__(self, basename=None, warn=None): + def __init__(self, basename=None, warn=None, debug=None): """Create a CoverageDataFiles to manage data files. `warn` is the warning function to use. `basename` is the name of the file to use for storing data. + `debug` is a `DebugControl` object for writing debug messages. + """ self.warn = warn + self.debug = debug + # Construct the file name that will be used for data storage. self.filename = os.path.abspath(basename or ".coverage") @@ -627,12 +635,16 @@ class CoverageDataFiles(object): basename by parallel-mode. """ + if self.debug and self.debug.should('dataio'): + self.debug.write("Erasing data file %r" % (self.filename,)) file_be_gone(self.filename) if parallel: data_dir, local = os.path.split(self.filename) localdot = local + '.*' pattern = os.path.join(os.path.abspath(data_dir), localdot) for filename in glob.glob(pattern): + if self.debug and self.debug.should('dataio'): + self.debug.write("Erasing parallel data file %r" % (filename,)) file_be_gone(filename) def read(self, data): @@ -660,7 +672,7 @@ class CoverageDataFiles(object): with open(_TEST_NAME_FILE) as f: test_name = f.read() extra = "." + test_name - dice = random.Random().randint(0, 999999) + dice = random.Random(os.urandom(8)).randint(0, 999999) suffix = "%s%s.%s.%06d" % (socket.gethostname(), extra, os.getpid(), dice) if suffix: @@ -711,7 +723,7 @@ class CoverageDataFiles(object): raise CoverageException("No data to combine") for f in files_to_combine: - new_data = CoverageData() + new_data = CoverageData(debug=self.debug) try: new_data.read_file(f) except CoverageException as exc: @@ -721,6 +733,8 @@ class CoverageDataFiles(object): self.warn(str(exc)) else: data.update(new_data, aliases=aliases) + if self.debug and self.debug.should('dataio'): + self.debug.write("Deleting combined data file %r" % (f,)) file_be_gone(f) |