summaryrefslogtreecommitdiff
path: root/coverage/sqldata.py
diff options
context:
space:
mode:
authorNed Batchelder <ned@nedbatchelder.com>2020-01-07 22:08:19 -0500
committerNed Batchelder <ned@nedbatchelder.com>2020-01-07 22:11:50 -0500
commite4b8389b27ce4e7681788b8a28dc875ff4991739 (patch)
treebf5f6e5e1ef0eb11b27383bcd346bc3f7341f341 /coverage/sqldata.py
parentd402b4600df571b7bbeaa614d1c84110e700896c (diff)
downloadpython-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.py28
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.