Looks like PyPy causes sqlite to have delayed file closing resulting in the following failure:
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/control.py", line 872, in report
return reporter.report(morfs, outfile=file)
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/summary.py", line 45, in report
for fr, analysis in get_analysis_to_report(self.coverage, morfs):
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/report.py", line 70, in get_analysis_to_report
analysis = coverage._analyze(fr)
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/control.py", line 774, in _analyze
return Analysis(data, it, self._file_mapper)
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 34, in __init__
mba = self.missing_branch_arcs()
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 129, in missing_branch_arcs
missing = self.arcs_missing()
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 88, in arcs_missing
executed = self.arcs_executed()
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/results.py", line 80, in arcs_executed
executed = self.data.arcs(self.filename) or []
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 886, in arcs
with self._connect() as con:
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1024, in __enter__
self._connect()
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1012, in _connect
self.execute("pragma journal_mode=off").close()
File "/home/arcivanov/Documents/src/arcivanov/pybuilder/.pybuilder/plugins/pypy-2.7.13.final.42/site-packages/coverage/sqldata.py", line 1063, in execute
raise CoverageException("Couldn't use data file {!r}: {}".format(self.filename, msg))
CoverageException: Couldn't use data file '/home/arcivanov/Documents/src/arcivanov/pybuilder/target/run_unit_tests.coverage': disk I/O error
Same code works on CPython 2.7, 3.5 - 3.8 on both Windows and Linux, both 32 and 64 bit with no issues.
The workaround for this is to completely disable gc while the coverage is running:
Looks like PyPy causes sqlite to have delayed file closing resulting in the following failure:
It looks like the issue is related to https://bitbucket.org/pypy/pypy/issues/2872/default-isolation-mode-is-different-on
Same code works on CPython 2.7, 3.5 - 3.8 on both Windows and Linux, both 32 and 64 bit with no issues.
The workaround for this is to completely disable gc while the coverage is running: