diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2020-01-07 22:08:19 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2020-01-07 22:11:50 -0500 |
commit | e4b8389b27ce4e7681788b8a28dc875ff4991739 (patch) | |
tree | bf5f6e5e1ef0eb11b27383bcd346bc3f7341f341 /coverage/sqldata.py | |
parent | d402b4600df571b7bbeaa614d1c84110e700896c (diff) | |
download | python-coveragepy-git-e4b8389b27ce4e7681788b8a28dc875ff4991739.tar.gz |
Put the filename calc back in _connect. Fixes #916
It was moved to __init__ to avoid recalculating, but the directory could
have changed, so we need to wait to do the work. Instead, only do the
relpath on systems that need it (Windows Py 2).
Diffstat (limited to 'coverage/sqldata.py')
-rw-r--r-- | coverage/sqldata.py | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 2bb3035a..cac2c4b3 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -16,6 +16,7 @@ import sqlite3 import sys import zlib +from coverage import env from coverage.backward import get_thread_id, iitems, to_bytes, to_string from coverage.debug import NoDebugging, SimpleReprMixin, clipped_repr from coverage.files import PathAliases @@ -971,23 +972,26 @@ class SqliteDb(SimpleReprMixin): self.filename = filename self.nest = 0 self.con = None - # SQLite on Windows on py2 won't open a file if the filename argument - # has non-ascii characters in it. Opening a relative file name avoids - # a problem if the current directory has non-ascii. - try: - self.connect_filename = os.path.relpath(self.filename) - except ValueError: - # ValueError can be raised under Windows when os.getcwd() returns a - # folder from a different drive than the drive of self.filename in - # which case we keep the original value of self.filename unchanged, - # hoping that we won't face the non-ascii directory problem. - self.connect_filename = self.filename def _connect(self): """Connect to the db and do universal initialization.""" if self.con is not None: return + # SQLite on Windows on py2 won't open a file if the filename argument + # has non-ascii characters in it. Opening a relative file name avoids + # a problem if the current directory has non-ascii. + filename = self.filename + if env.WINDOWS and env.PY2: + try: + filename = os.path.relpath(self.filename) + except ValueError: + # ValueError can be raised under Windows when os.getcwd() returns a + # folder from a different drive than the drive of self.filename in + # which case we keep the original value of self.filename unchanged, + # hoping that we won't face the non-ascii directory problem. + pass + # It can happen that Python switches threads while the tracer writes # data. The second thread will also try to write to the data, # effectively causing a nested context. However, given the idempotent @@ -995,7 +999,7 @@ class SqliteDb(SimpleReprMixin): # is not a problem. if self.debug: self.debug.write("Connecting to {!r}".format(self.filename)) - self.con = sqlite3.connect(self.connect_filename, check_same_thread=False) + self.con = sqlite3.connect(filename, check_same_thread=False) self.con.create_function('REGEXP', 2, _regexp) # This pragma makes writing faster. It disables rollbacks, but we never need them. |