summaryrefslogtreecommitdiff
path: root/coverage
diff options
context:
space:
mode:
Diffstat (limited to 'coverage')
-rw-r--r--coverage/cmdline.py2
-rw-r--r--coverage/data.py8
-rw-r--r--coverage/sqldata.py34
3 files changed, 29 insertions, 15 deletions
diff --git a/coverage/cmdline.py b/coverage/cmdline.py
index 4af48170..f2c36745 100644
--- a/coverage/cmdline.py
+++ b/coverage/cmdline.py
@@ -667,7 +667,7 @@ class CoverageScript(object):
self.coverage.load()
data = self.coverage.get_data()
print(info_header("data"))
- print("path: %s" % self.coverage.get_data().filename)
+ print("path: %s" % self.coverage.get_data().filename())
if data:
print("has_arcs: %r" % data.has_arcs())
summary = line_counts(data, fullpath=True)
diff --git a/coverage/data.py b/coverage/data.py
index d6061293..f78628a5 100644
--- a/coverage/data.py
+++ b/coverage/data.py
@@ -710,7 +710,7 @@ def combine_parallel_data(data, aliases=None, data_paths=None, strict=False):
"""
# Because of the os.path.abspath in the constructor, data_dir will
# never be an empty string.
- data_dir, local = os.path.split(data.filename)
+ data_dir, local = os.path.split(data.base_filename())
localdot = local + '.*'
data_paths = data_paths or [data_dir]
@@ -729,6 +729,12 @@ def combine_parallel_data(data, aliases=None, data_paths=None, strict=False):
files_combined = 0
for f in files_to_combine:
+ if f == data.filename():
+ # Sometimes we are combining into a file which is one of the
+ # parallel files. Skip that file.
+ if data._debug.should('dataio'):
+ data._debug.write("Skipping combining ourself: %r" % (f,))
+ continue
if data._debug.should('dataio'):
data._debug.write("Combining data file %r" % (f,))
try:
diff --git a/coverage/sqldata.py b/coverage/sqldata.py
index 5ae99c7e..893f620d 100644
--- a/coverage/sqldata.py
+++ b/coverage/sqldata.py
@@ -97,10 +97,10 @@ class CoverageSqliteData(SimpleReprMixin):
self._current_context_id = None
def _choose_filename(self):
- self.filename = self._basename
+ self._filename = self._basename
suffix = filename_suffix(self._suffix)
if suffix:
- self.filename += "." + suffix
+ self._filename += "." + suffix
def _reset(self):
if self._dbs:
@@ -113,8 +113,8 @@ class CoverageSqliteData(SimpleReprMixin):
def _create_db(self):
if self._debug.should('dataio'):
- self._debug.write("Creating data file {!r}".format(self.filename))
- self._dbs[get_thread_id()] = Sqlite(self.filename, self._debug)
+ self._debug.write("Creating data file {!r}".format(self._filename))
+ self._dbs[get_thread_id()] = Sqlite(self._filename, self._debug)
with self._dbs[get_thread_id()] as db:
for stmt in SCHEMA.split(';'):
stmt = " ".join(stmt.strip().split())
@@ -128,22 +128,22 @@ class CoverageSqliteData(SimpleReprMixin):
def _open_db(self):
if self._debug.should('dataio'):
- self._debug.write("Opening data file {!r}".format(self.filename))
- self._dbs[get_thread_id()] = Sqlite(self.filename, self._debug)
+ self._debug.write("Opening data file {!r}".format(self._filename))
+ self._dbs[get_thread_id()] = Sqlite(self._filename, self._debug)
with self._dbs[get_thread_id()] as db:
try:
schema_version, = db.execute("select version from coverage_schema").fetchone()
except Exception as exc:
raise CoverageException(
"Data file {!r} doesn't seem to be a coverage data file: {}".format(
- self.filename, exc
+ self._filename, exc
)
)
else:
if schema_version != SCHEMA_VERSION:
raise CoverageException(
"Couldn't use data file {!r}: wrong schema: {} instead of {}".format(
- self.filename, schema_version, SCHEMA_VERSION
+ self._filename, schema_version, SCHEMA_VERSION
)
)
@@ -155,14 +155,14 @@ class CoverageSqliteData(SimpleReprMixin):
def _connect(self):
if get_thread_id() not in self._dbs:
- if os.path.exists(self.filename):
+ if os.path.exists(self._filename):
self._open_db()
else:
self._create_db()
return self._dbs[get_thread_id()]
def __nonzero__(self):
- if (get_thread_id() not in self._dbs and not os.path.exists(self.filename)):
+ if (get_thread_id() not in self._dbs and not os.path.exists(self._filename)):
return False
try:
with self._connect() as con:
@@ -221,6 +221,14 @@ class CoverageSqliteData(SimpleReprMixin):
cur = con.execute("insert into context (context) values (?)", (context,))
self._current_context_id = cur.lastrowid
+ def base_filename(self):
+ """The base filename for storing data."""
+ return self._basename
+
+ def filename(self):
+ """Where is the data stored?"""
+ return self._filename
+
def add_lines(self, line_data):
"""Add measured line data.
@@ -477,10 +485,10 @@ class CoverageSqliteData(SimpleReprMixin):
"""
self._reset()
if self._debug.should('dataio'):
- self._debug.write("Erasing data file {!r}".format(self.filename))
- file_be_gone(self.filename)
+ self._debug.write("Erasing data file {!r}".format(self._filename))
+ file_be_gone(self._filename)
if parallel:
- data_dir, local = os.path.split(self.filename)
+ 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):