diff options
-rw-r--r-- | CHANGES.rst | 7 | ||||
-rw-r--r-- | coverage/cmdline.py | 2 | ||||
-rw-r--r-- | coverage/data.py | 8 | ||||
-rw-r--r-- | coverage/sqldata.py | 34 | ||||
-rw-r--r-- | tests/test_cmdline.py | 4 |
5 files changed, 38 insertions, 17 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 547e346c..e8dc45de 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -29,10 +29,17 @@ Unreleased - Combining data stored in SQLite now goes about twice as fast, fixing `issue 761`_. Thanks, Stephan Richter. +- The ``filename`` attribute on `CoverageData` object has been made private. + You can use the ``filename`` method to get the actual file name being used + to store data, and the ``base_filename`` method to get the original filename + before parallelizing suffixes were added. This is part of fixing `issue + 708`_. + - Line numbers in the HTML report now align properly with source lines, even when Chrome's minimum font size is set, fixing `issue 748`_. Thanks Wen Ye. .. _issue 702: https://github.com/nedbat/coveragepy/issues/702 +.. _issue 708: https://github.com/nedbat/coveragepy/issues/708 .. _issue 746: https://github.com/nedbat/coveragepy/issues/746 .. _issue 748: https://github.com/nedbat/coveragepy/issues/748 .. _issue 761: https://github.com/nedbat/coveragepy/issues/761 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): diff --git a/tests/test_cmdline.py b/tests/test_cmdline.py index 51112602..2a7fba57 100644 --- a/tests/test_cmdline.py +++ b/tests/test_cmdline.py @@ -691,7 +691,7 @@ class CmdLineWithFilesTest(BaseCmdLineTest): 2 files: file1.py: 17 lines [a_plugin] file2.py: 23 lines - """).replace("FILENAME", data.filename)) + """).replace("FILENAME", data.filename())) def test_debug_data_with_no_data(self): data = CoverageData() @@ -700,7 +700,7 @@ class CmdLineWithFilesTest(BaseCmdLineTest): -- data ------------------------------------------------------ path: FILENAME No data collected - """).replace("FILENAME", data.filename)) + """).replace("FILENAME", data.filename())) class CmdLineStdoutTest(BaseCmdLineTest): |