From 067d0a60384b5f12cfee622381cfb5905efb8e13 Mon Sep 17 00:00:00 2001 From: Ned Batchelder Date: Tue, 14 Aug 2018 20:38:39 -0400 Subject: Use pid-random suffixes for SQL files --- coverage/data.py | 21 ++++++++++++--------- coverage/sqldata.py | 4 ++++ 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/coverage/data.py b/coverage/data.py index 5e85fc10..aa23e7d4 100644 --- a/coverage/data.py +++ b/coverage/data.py @@ -21,6 +21,17 @@ from coverage.misc import CoverageException, file_be_gone, isolate_module os = isolate_module(os) +def filename_suffix(suffix): + if suffix is True: + # If data_suffix was a simple true value, then make a suffix with + # plenty of distinguishing information. We do this here in + # `save()` at the last minute so that the pid will be correct even + # if the process forks. + dice = random.Random(os.urandom(8)).randint(0, 999999) + suffix = "%s.%s.%06d" % (socket.gethostname(), os.getpid(), dice) + return suffix + + class CoverageJsonData(object): """Manages collected coverage data, including file storage. @@ -444,15 +455,7 @@ class CoverageJsonData(object): """ filename = self.filename - suffix = self.suffix - if suffix is True: - # If data_suffix was a simple true value, then make a suffix with - # plenty of distinguishing information. We do this here in - # `save()` at the last minute so that the pid will be correct even - # if the process forks. - dice = random.Random(os.urandom(8)).randint(0, 999999) - suffix = "%s.%s.%06d" % (socket.gethostname(), os.getpid(), dice) - + suffix = filename_suffix(self.suffix) if suffix: filename += "." + suffix self._write_file(filename) diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 5ae5e64d..f36a9385 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -13,6 +13,7 @@ import sqlite3 import struct from coverage.backward import iitems +from coverage.data import filename_suffix from coverage.debug import SimpleRepr from coverage.files import PathAliases from coverage.misc import CoverageException, file_be_gone @@ -62,6 +63,9 @@ def signed_to_unsigned(val): class CoverageSqliteData(SimpleRepr): def __init__(self, basename=None, suffix=None, warn=None, debug=None): self.filename = os.path.abspath(basename or ".coverage") + suffix = filename_suffix(suffix) + if suffix: + self.filename += "." + suffix self._warn = warn self._debug = debug -- cgit v1.2.1