diff options
author | Ned Batchelder <ned@nedbatchelder.com> | 2020-11-24 19:41:38 -0500 |
---|---|---|
committer | Ned Batchelder <ned@nedbatchelder.com> | 2020-12-05 09:24:08 -0500 |
commit | 3f18bfc67aa40797d68745d5ea26a369b6c97ae9 (patch) | |
tree | a26c15603c2be90615ff2b9cc2577ee4253a03f5 | |
parent | 104d51ede4b27ac26429a55340605962e81755d4 (diff) | |
download | python-coveragepy-git-3f18bfc67aa40797d68745d5ea26a369b6c97ae9.tar.gz |
Retry in the case of failures. #1010
PyPy seems prone to intermittent SQLite failures. An immediate retry
avoids them. Not great, but it works.
-rw-r--r-- | CHANGES.rst | 5 | ||||
-rw-r--r-- | coverage/sqldata.py | 8 |
2 files changed, 12 insertions, 1 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index 52fd6645..800ab2cf 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -27,9 +27,14 @@ Unreleased - When using ``--source`` on a large source tree, v5.x was slower than previous versions. This performance regression is now fixed, closing `issue 1037`_. +- Mysterious SQLite errors can happen on PyPy, as reported in `issue 1010`_. An + immediate retry seems to fix the problem, although it is an unsatisfying + solution. + - Continuous integration has moved from Travis and AppVeyor to GitHub Actions. .. _issue 1037: https://github.com/nedbat/coveragepy/issues/1037 +.. _issue 1010: https://github.com/nedbat/coveragepy/issues/1010 .. _changes_53: diff --git a/coverage/sqldata.py b/coverage/sqldata.py index 702bd42b..7a3b5c79 100644 --- a/coverage/sqldata.py +++ b/coverage/sqldata.py @@ -1056,7 +1056,13 @@ class SqliteDb(SimpleReprMixin): tail = " with {!r}".format(parameters) if parameters else "" self.debug.write("Executing {!r}{}".format(sql, tail)) try: - return self.con.execute(sql, parameters) + try: + return self.con.execute(sql, parameters) + except Exception: + # In some cases, an error might happen that isn't really an + # error. Try again immediately. + # https://github.com/nedbat/coveragepy/issues/1010 + return self.con.execute(sql, parameters) except sqlite3.Error as exc: msg = str(exc) try: |