Accepting request 938526 from devel:languages:python
OBS-URL: https://build.opensuse.org/request/show/938526 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/python-coverage?expand=0&rev=46
This commit is contained in:
commit
38c47a9379
@ -1,140 +0,0 @@
|
|||||||
From e36b42e2db46e892d9347ba0408c99b187ba8cb8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
|
||||||
Date: Mon, 3 May 2021 07:56:05 -0400
|
|
||||||
Subject: [PATCH] fix: make data collection operations thread-safe
|
|
||||||
|
|
||||||
---
|
|
||||||
CHANGES.rst | 3 +++
|
|
||||||
coverage/sqldata.py | 20 ++++++++++++++++++++
|
|
||||||
tests/test_data.py | 7 ++++++-
|
|
||||||
3 files changed, 29 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
#diff --git a/CHANGES.rst b/CHANGES.rst
|
|
||||||
#index 29af7340..3c65e5d8 100644
|
|
||||||
#--- a/CHANGES.rst
|
|
||||||
#+++ b/CHANGES.rst
|
|
||||||
#@@ -26,6 +26,9 @@ Unreleased
|
|
||||||
#
|
|
||||||
# - Dropped support for Python 2.7, PyPy 2, and Python 3.5.
|
|
||||||
#
|
|
||||||
#+- Data collection is now thread-safe. There may have been rare instances of
|
|
||||||
#+ exceptions raised in multi-threaded programs.
|
|
||||||
#+
|
|
||||||
# - Plugins (like the `Django coverage plugin`_) were generating "Already
|
|
||||||
# imported a file that will be measured" warnings about Django itself. These
|
|
||||||
# have been fixed, closing `issue 1150`_.
|
|
||||||
Index: coverage-5.5/coverage/sqldata.py
|
|
||||||
===================================================================
|
|
||||||
--- coverage-5.5.orig/coverage/sqldata.py
|
|
||||||
+++ coverage-5.5/coverage/sqldata.py
|
|
||||||
@@ -8,12 +8,14 @@
|
|
||||||
|
|
||||||
import collections
|
|
||||||
import datetime
|
|
||||||
+import functools
|
|
||||||
import glob
|
|
||||||
import itertools
|
|
||||||
import os
|
|
||||||
import re
|
|
||||||
import sqlite3
|
|
||||||
import sys
|
|
||||||
+import threading
|
|
||||||
import zlib
|
|
||||||
|
|
||||||
from coverage import env
|
|
||||||
@@ -179,6 +181,10 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
Data in a :class:`CoverageData` can be serialized and deserialized with
|
|
||||||
:meth:`dumps` and :meth:`loads`.
|
|
||||||
|
|
||||||
+ The methods used during the coverage.py collection phase
|
|
||||||
+ (:meth:`add_lines`, :meth:`add_arcs`, :meth:`set_context`, and
|
|
||||||
+ :meth:`add_file_tracers`) are thread-safe. Other methods may not be.
|
|
||||||
+
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, basename=None, suffix=None, no_disk=False, warn=None, debug=None):
|
|
||||||
@@ -207,6 +213,8 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
# Maps thread ids to SqliteDb objects.
|
|
||||||
self._dbs = {}
|
|
||||||
self._pid = os.getpid()
|
|
||||||
+ # Synchronize the operations used during collection.
|
|
||||||
+ self._lock = threading.Lock()
|
|
||||||
|
|
||||||
# Are we in sync with the data file?
|
|
||||||
self._have_used = False
|
|
||||||
@@ -218,6 +226,15 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
self._current_context_id = None
|
|
||||||
self._query_context_ids = None
|
|
||||||
|
|
||||||
+ def _locked(method): # pylint: disable=no-self-argument
|
|
||||||
+ """A decorator for methods that should hold self._lock."""
|
|
||||||
+ @functools.wraps(method)
|
|
||||||
+ def _wrapped(self, *args, **kwargs):
|
|
||||||
+ with self._lock:
|
|
||||||
+ # pylint: disable=not-callable
|
|
||||||
+ return method(self, *args, **kwargs)
|
|
||||||
+ return _wrapped
|
|
||||||
+
|
|
||||||
def _choose_filename(self):
|
|
||||||
"""Set self._filename based on inited attributes."""
|
|
||||||
if self._no_disk:
|
|
||||||
@@ -381,6 +398,7 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
else:
|
|
||||||
return None
|
|
||||||
|
|
||||||
+ @_locked
|
|
||||||
def set_context(self, context):
|
|
||||||
"""Set the current context for future :meth:`add_lines` etc.
|
|
||||||
|
|
||||||
@@ -422,6 +440,7 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
"""
|
|
||||||
return self._filename
|
|
||||||
|
|
||||||
+ @_locked
|
|
||||||
def add_lines(self, line_data):
|
|
||||||
"""Add measured line data.
|
|
||||||
|
|
||||||
@@ -454,6 +473,7 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
(file_id, self._current_context_id, linemap),
|
|
||||||
)
|
|
||||||
|
|
||||||
+ @_locked
|
|
||||||
def add_arcs(self, arc_data):
|
|
||||||
"""Add measured arc data.
|
|
||||||
|
|
||||||
@@ -498,6 +518,7 @@ class CoverageData(SimpleReprMixin):
|
|
||||||
('has_arcs', str(int(arcs)))
|
|
||||||
)
|
|
||||||
|
|
||||||
+ @_locked
|
|
||||||
def add_file_tracers(self, file_tracers):
|
|
||||||
"""Add per-file plugin information.
|
|
||||||
|
|
||||||
Index: coverage-5.5/tests/test_data.py
|
|
||||||
===================================================================
|
|
||||||
--- coverage-5.5.orig/tests/test_data.py
|
|
||||||
+++ coverage-5.5/tests/test_data.py
|
|
||||||
@@ -488,10 +488,14 @@ class CoverageDataTest(DataTestHelpers,
|
|
||||||
|
|
||||||
def test_thread_stress(self):
|
|
||||||
covdata = CoverageData()
|
|
||||||
+ exceptions = []
|
|
||||||
|
|
||||||
def thread_main():
|
|
||||||
"""Every thread will try to add the same data."""
|
|
||||||
- covdata.add_lines(LINES_1)
|
|
||||||
+ try:
|
|
||||||
+ covdata.add_lines(LINES_1)
|
|
||||||
+ except Exception as ex:
|
|
||||||
+ exceptions.append(ex)
|
|
||||||
|
|
||||||
threads = [threading.Thread(target=thread_main) for _ in range(10)]
|
|
||||||
for t in threads:
|
|
||||||
@@ -500,6 +504,7 @@ class CoverageDataTest(DataTestHelpers,
|
|
||||||
t.join()
|
|
||||||
|
|
||||||
self.assert_lines1_data(covdata)
|
|
||||||
+ assert exceptions == []
|
|
||||||
|
|
||||||
|
|
||||||
class CoverageDataTestInTempDir(DataTestHelpers, CoverageTest):
|
|
@ -1,36 +0,0 @@
|
|||||||
From 01cbb8751f98e5a7de79699444cbc03647691616 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
|
||||||
Date: Tue, 11 May 2021 19:32:32 -0400
|
|
||||||
Subject: [PATCH] fix: Python 3.8.10 changed how __file__ is reported when
|
|
||||||
running directories
|
|
||||||
|
|
||||||
---
|
|
||||||
coverage/execfile.py | 5 +++++
|
|
||||||
tests/test_process.py | 2 +-
|
|
||||||
2 files changed, 6 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/coverage/execfile.py
|
|
||||||
+++ b/coverage/execfile.py
|
|
||||||
@@ -176,6 +176,11 @@ class PyRunner(object):
|
|
||||||
# directory.
|
|
||||||
for ext in [".py", ".pyc", ".pyo"]:
|
|
||||||
try_filename = os.path.join(self.arg0, "__main__" + ext)
|
|
||||||
+ # 3.8.10 changed how files are reported when running a
|
|
||||||
+ # directory. But I'm not sure how far this change is going to
|
|
||||||
+ # spread, so I'll just hard-code it here for now.
|
|
||||||
+ if env.PYVERSION >= (3, 8, 10):
|
|
||||||
+ try_filename = os.path.abspath(try_filename)
|
|
||||||
if os.path.exists(try_filename):
|
|
||||||
self.arg0 = try_filename
|
|
||||||
break
|
|
||||||
--- a/tests/test_process.py
|
|
||||||
+++ b/tests/test_process.py
|
|
||||||
@@ -852,7 +852,7 @@ class EnvironmentTest(CoverageTest):
|
|
||||||
expected = re_lines(expected, r'\s+"argv0":', match=False)
|
|
||||||
actual = re_lines(actual, r'\s+"argv0":', match=False)
|
|
||||||
|
|
||||||
- assert expected == actual
|
|
||||||
+ assert actual == expected
|
|
||||||
|
|
||||||
def test_coverage_run_is_like_python(self):
|
|
||||||
with open(TRY_EXECFILE) as f:
|
|
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c
|
|
||||||
size 691258
|
|
3
coverage-6.2.tar.gz
Normal file
3
coverage-6.2.tar.gz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:e2cad8093172b7d1595b4ad66f24270808658e11acf43a8f95b41276162eb5b8
|
||||||
|
size 678664
|
@ -1,3 +1,187 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu Dec 9 17:16:23 UTC 2021 - Ben Greiner <code@bnavigator.de>
|
||||||
|
|
||||||
|
- Update to version 6.2
|
||||||
|
* Feature: Now the --concurrency setting can now have a list of
|
||||||
|
values, so that threads and another lightweight threading
|
||||||
|
package can be measured together, such as
|
||||||
|
--concurrency=gevent,thread. Closes issue 1012 and issue 1082.
|
||||||
|
* Fix: A module specified as the source setting is imported
|
||||||
|
during startup, before the user program imports it. This could
|
||||||
|
cause problems if the rest of the program isn't ready yet. For
|
||||||
|
example, issue 1203 describes a Django setting that is accessed
|
||||||
|
before settings have been configured. Now the early import is
|
||||||
|
wrapped in a try/except so errors then don't stop execution.
|
||||||
|
* Fix: A colon in a decorator expression would cause an exclusion
|
||||||
|
to end too early, preventing the exclusion of the decorated
|
||||||
|
function. This is now fixed.
|
||||||
|
* Fix: The HTML report now will not overwrite a .gitignore file
|
||||||
|
that already exists in the HTML output directory (follow-on for
|
||||||
|
issue 1244).
|
||||||
|
* API: The exceptions raised by Coverage.py have been
|
||||||
|
specialized, to provide finer-grained catching of exceptions by
|
||||||
|
third-party code.
|
||||||
|
* API: Using suffix=False when constructing a Coverage object
|
||||||
|
with multiprocessing wouldn't suppress the data file suffix
|
||||||
|
(issue 989). This is now fixed.
|
||||||
|
* Debug: The coverage debug data command will now sniff out
|
||||||
|
combinable data files, and report on all of them.
|
||||||
|
* Debug: The coverage debug command used to accept a number of
|
||||||
|
topics at a time, and show all of them, though this was never
|
||||||
|
documented. This no longer works, to allow for command-line
|
||||||
|
options in the future.
|
||||||
|
- Release notes for 6.1.2
|
||||||
|
* Python 3.11 is supported (tested with 3.11.0a2). One still-open
|
||||||
|
issue has to do with exits through with-statements.
|
||||||
|
* Fix: When remapping file paths through the [paths] setting
|
||||||
|
while combining, the [run] relative_files setting was ignored,
|
||||||
|
resulting in absolute paths for remapped file names (issue
|
||||||
|
1147). This is now fixed.
|
||||||
|
* Fix: Complex conditionals over excluded lines could have
|
||||||
|
incorrectly reported a missing branch (issue 1271). This is now
|
||||||
|
fixed.
|
||||||
|
* Fix: More exceptions are now handled when trying to parse
|
||||||
|
source files for reporting. Problems that used to terminate
|
||||||
|
coverage.py can now be handled with [report] ignore_errors.
|
||||||
|
This helps with plugins failing to read files
|
||||||
|
(django_coverage_plugin issue 78).
|
||||||
|
* Fix: Removed another vestige of jQuery from the source tarball
|
||||||
|
(issue 840).
|
||||||
|
* Fix: Added a default value for a new-to-6.x argument of an
|
||||||
|
internal class. This unsupported class is being used by
|
||||||
|
coveralls (issue 1273). Although I'd rather not "fix"
|
||||||
|
unsupported interfaces, it's actually nicer with a default
|
||||||
|
value.
|
||||||
|
- Release notes for 6.1.1
|
||||||
|
* Fix: The sticky header on the HTML report didn't work unless
|
||||||
|
you had branch coverage enabled. This is now fixed: the sticky
|
||||||
|
header works for everyone. (Do people still use coverage
|
||||||
|
without branch measurement!? j/k)
|
||||||
|
* Fix: When using explicitly declared namespace packages, the
|
||||||
|
"already imported a file that will be measured" warning would
|
||||||
|
be issued (issue 888). This is now fixed.
|
||||||
|
- Release notes for 6.1
|
||||||
|
* Deprecated: The annotate command and the Coverage.annotate
|
||||||
|
function will be removed in a future version, unless people let
|
||||||
|
me know that they are using it. Instead, the html command gives
|
||||||
|
better-looking (and more accurate) output, and the report -m
|
||||||
|
command will tell you line numbers of missing lines. Please get
|
||||||
|
in touch if you have a reason to use annotate over those better
|
||||||
|
options: ned@nedbatchelder.com.
|
||||||
|
* Feature: Coverage now sets an environment variable,
|
||||||
|
COVERAGE_RUN when running your code with the coverage run
|
||||||
|
command. The value is not important, and may change in the
|
||||||
|
future. Closes issue 553.
|
||||||
|
* Feature: The HTML report pages for Python source files now have
|
||||||
|
a sticky header so the file name and controls are always
|
||||||
|
visible.
|
||||||
|
* Feature: The xml and json commands now describe what they wrote
|
||||||
|
where.
|
||||||
|
* Feature: The html, combine, xml, and json commands all accept a
|
||||||
|
-q/--quiet option to suppress the messages they write to stdout
|
||||||
|
about what they are doing (issue 1254).
|
||||||
|
* Feature: The html command writes a .gitignore file into the
|
||||||
|
HTML output directory, to prevent the report from being
|
||||||
|
committed to git. If you want to commit it, you will need to
|
||||||
|
delete that file. Closes issue 1244.
|
||||||
|
* Feature: Added support for PyPy 3.8.
|
||||||
|
* Fix: More generated code is now excluded from measurement. Code
|
||||||
|
such as attrs boilerplate, or doctest code, was being measured
|
||||||
|
though the synthetic line numbers meant they were never
|
||||||
|
reported. Once Cython was involved though, the generated .so
|
||||||
|
files were parsed as Python, raising syntax errors, as reported
|
||||||
|
in issue 1160. This is now fixed.
|
||||||
|
* Fix: When sorting human-readable names, numeric components are
|
||||||
|
sorted correctly: file10.py will appear after file9.py. This
|
||||||
|
applies to file names, module names, environment variables, and
|
||||||
|
test contexts.
|
||||||
|
* Performance: Branch coverage measurement is faster, though you
|
||||||
|
might only notice on code that is executed many times, such as
|
||||||
|
long-running loops.
|
||||||
|
* Build: jQuery is no longer used or vendored (issue 840 and
|
||||||
|
issue 1118). Huge thanks to Nils Kattenbeck (septatrix) for the
|
||||||
|
conversion to vanilla JavaScript in pull request 1248.
|
||||||
|
- Release notes for 6.0.2
|
||||||
|
* Namespace packages being measured weren't properly handled by
|
||||||
|
the new code that ignores third-party packages. If the
|
||||||
|
namespace package was installed, it was ignored as a
|
||||||
|
third-party package. That problem (issue 1231) is now fixed.
|
||||||
|
* Packages named as "source packages" (with source, or
|
||||||
|
source_pkgs, or pytest-cov's --cov) might have been only
|
||||||
|
partially measured. Their top-level statements could be marked
|
||||||
|
as unexecuted, because they were imported by coverage.py before
|
||||||
|
measurement began (issue 1232). This is now fixed, but the
|
||||||
|
package will be imported twice, once by coverage.py, then again
|
||||||
|
by your test suite. This could cause problems if importing the
|
||||||
|
package has side effects.
|
||||||
|
* The :meth:`.CoverageData.contexts_by_lineno` method was
|
||||||
|
documented to return a dict, but was returning a defaultdict.
|
||||||
|
Now it returns a plain dict. It also no longer returns negative
|
||||||
|
numbered keys.
|
||||||
|
- Release notes for 6.0.1
|
||||||
|
* In 6.0, the coverage.py exceptions moved from coverage.misc to
|
||||||
|
coverage.exceptions. These exceptions are not part of the
|
||||||
|
public supported API, CoverageException is. But a number of
|
||||||
|
other third-party packages were importing the exceptions from
|
||||||
|
coverage.misc, so they are now available from there again
|
||||||
|
(issue 1226).
|
||||||
|
* Changed an internal detail of how tomli is imported, so that
|
||||||
|
tomli can use coverage.py for their own test suite (issue
|
||||||
|
1228).
|
||||||
|
* Defend against an obscure possibility under code obfuscation,
|
||||||
|
where a function can have an argument called "self", but no
|
||||||
|
local named "self" (pull request 1210). Thanks, Ben Carlsson.
|
||||||
|
- Release notes for 6.0
|
||||||
|
* The coverage html command now prints a message indicating where
|
||||||
|
the HTML report was written. Fixes issue 1195.
|
||||||
|
* The coverage combine command now prints messages indicating
|
||||||
|
each data file being combined. Fixes issue 1105.
|
||||||
|
* The HTML report now includes a sentence about skipped files due
|
||||||
|
to skip_covered or skip_empty settings. Fixes issue 1163.
|
||||||
|
* Unrecognized options in the configuration file are no longer
|
||||||
|
errors. They are now warnings, to ease the use of coverage
|
||||||
|
across versions. Fixes issue 1035.
|
||||||
|
* Fix handling of exceptions through context managers in Python
|
||||||
|
3.10. A missing exception is no longer considered a missing
|
||||||
|
branch from the with statement. Fixes issue 1205.
|
||||||
|
* Fix another rarer instance of "Error binding parameter 0 -
|
||||||
|
probably unsupported type." (issue 1010).
|
||||||
|
* Creating a directory for the coverage data file now is safer
|
||||||
|
against conflicts when two coverage runs happen simultaneously
|
||||||
|
(pull 1220). Thanks, Clément Pit-Claudel.
|
||||||
|
- Release notes for Version 6.0b1
|
||||||
|
* Dropped support for Python 2.7, PyPy 2, and Python 3.5.
|
||||||
|
* Added support for the Python 3.10 match/case syntax.
|
||||||
|
* Data collection is now thread-safe. There may have been rare
|
||||||
|
instances of exceptions raised in multi-threaded programs.
|
||||||
|
* Plugins (like the Django coverage plugin) were generating
|
||||||
|
"Already imported a file that will be measured" warnings about
|
||||||
|
Django itself. These have been fixed, closing issue 1150.
|
||||||
|
* Warnings generated by coverage.py are now real Python warnings.
|
||||||
|
* Using --fail-under=100 with coverage near 100% could result in
|
||||||
|
the self-contradictory message total of 100 is less than
|
||||||
|
fail-under=100. This bug (issue 1168) is now fixed.
|
||||||
|
* The COVERAGE_DEBUG_FILE environment variable now accepts stdout
|
||||||
|
and stderr to write to those destinations.
|
||||||
|
* TOML parsing now uses the tomli library.
|
||||||
|
* Some minor changes to usually invisible details of the HTML
|
||||||
|
report:
|
||||||
|
* Use a modern hash algorithm when fingerprinting, for
|
||||||
|
high-security environments (issue 1189). When generating the
|
||||||
|
HTML report, we save the hash of the data, to avoid
|
||||||
|
regenerating an unchanged HTML page. We used to use MD5 to
|
||||||
|
generate the hash, and now use SHA-3-256. This was never a
|
||||||
|
security concern, but security scanners would notice the MD5
|
||||||
|
algorithm and raise a false alarm.
|
||||||
|
* Change how report file names are generated, to avoid leading
|
||||||
|
underscores (issue 1167), to avoid rare file name collisions
|
||||||
|
(issue 584), and to avoid file names becoming too long (issue
|
||||||
|
580).
|
||||||
|
- Drop patches
|
||||||
|
* 0001-make-data-collection-operations-thread-safe.patch
|
||||||
|
* change__file__report-dir.patch
|
||||||
|
* traced_file_absolute.patch
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Wed May 12 09:29:03 UTC 2021 - Matej Cepl <mcepl@suse.com>
|
Wed May 12 09:29:03 UTC 2021 - Matej Cepl <mcepl@suse.com>
|
||||||
|
|
||||||
|
@ -16,39 +16,31 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
|
|
||||||
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
|
%{?!python_module:%define python_module() python3-%{**}}
|
||||||
|
%define skip_python2 1
|
||||||
Name: python-coverage
|
Name: python-coverage
|
||||||
Version: 5.5
|
Version: 6.2
|
||||||
Release: 0
|
Release: 0
|
||||||
Summary: Code coverage measurement for Python
|
Summary: Code coverage measurement for Python
|
||||||
License: Apache-2.0
|
License: Apache-2.0
|
||||||
URL: https://github.com/nedbat/coveragepy
|
URL: https://github.com/nedbat/coveragepy
|
||||||
Source: https://files.pythonhosted.org/packages/source/c/coverage/coverage-%{version}.tar.gz
|
Source: https://files.pythonhosted.org/packages/source/c/coverage/coverage-%{version}.tar.gz
|
||||||
# PATCH-FIX-UPSTREAM traced_file_absolute.patch gh#nedbat/coveragepy#1161 mcepl@suse.com
|
|
||||||
# traced file names seem to be absolute now?
|
|
||||||
Patch0: traced_file_absolute.patch
|
|
||||||
# PATCH-FIX-UPSTREAM 0001-make-data-collection-operations-thread-safe.patch gh#nedbat/coveragepy#commit-e36b42e2db46 alarrosa@suse.com
|
|
||||||
# Make data collection operations thread safe
|
|
||||||
Patch1: 0001-make-data-collection-operations-thread-safe.patch
|
|
||||||
# PATCH-FIX-UPSTREAM change__file__report-dir.patch gh#nedbat/coveragepy#1161 mcepl@suse.com
|
|
||||||
# Fix yet another regression in Python 3.8.10, this time about __file__ value for directories.
|
|
||||||
Patch2: change__file__report-dir.patch
|
|
||||||
BuildRequires: %{python_module devel}
|
BuildRequires: %{python_module devel}
|
||||||
|
BuildRequires: %{python_module setuptools}
|
||||||
|
# SECTION test requirements
|
||||||
BuildRequires: %{python_module flaky}
|
BuildRequires: %{python_module flaky}
|
||||||
BuildRequires: %{python_module hypothesis >= 4.57}
|
BuildRequires: %{python_module hypothesis >= 4.57}
|
||||||
BuildRequires: %{python_module mock}
|
|
||||||
BuildRequires: %{python_module pytest >= 4.6}
|
BuildRequires: %{python_module pytest >= 4.6}
|
||||||
BuildRequires: %{python_module pytest-xdist}
|
BuildRequires: %{python_module pytest-xdist}
|
||||||
BuildRequires: %{python_module setuptools}
|
BuildRequires: %{python_module tomli}
|
||||||
BuildRequires: %{python_module toml}
|
# for database (sqlite3) support
|
||||||
BuildRequires: %{python_module unittest-mixins}
|
BuildRequires: %pythons
|
||||||
BuildRequires: %{python_module xml}
|
# /SECTION
|
||||||
BuildRequires: %{pythons}
|
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
BuildRequires: python-rpm-macros
|
BuildRequires: python-rpm-macros
|
||||||
Requires: python
|
Requires: python
|
||||||
Requires: python-setuptools
|
# coverage[toml]
|
||||||
Requires: python-toml
|
Recommends: python-tomli
|
||||||
Requires(post): update-alternatives
|
Requires(post): update-alternatives
|
||||||
Requires(postun):update-alternatives
|
Requires(postun):update-alternatives
|
||||||
%python_subpackages
|
%python_subpackages
|
||||||
@ -61,14 +53,8 @@ library to determine which lines are executable, and which have been executed.
|
|||||||
%prep
|
%prep
|
||||||
%autosetup -p1 -n coverage-%{version}
|
%autosetup -p1 -n coverage-%{version}
|
||||||
|
|
||||||
# do not require xdist
|
# we define everything necessary ourselves below
|
||||||
sed -i -e '/addopts/d' setup.cfg
|
sed -i -e '/addopts/d' setup.cfg
|
||||||
# writes in /usr/
|
|
||||||
rm tests/test_process.py
|
|
||||||
# summary differs trivialy
|
|
||||||
rm tests/test_summary.py
|
|
||||||
# requires additional plugins
|
|
||||||
rm tests/test_plugins.py
|
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%python_build
|
%python_build
|
||||||
@ -80,18 +66,6 @@ rm -vf %{buildroot}%{_bindir}/coverage{2,3}
|
|||||||
%python_expand %fdupes %{buildroot}%{$python_sitearch}
|
%python_expand %fdupes %{buildroot}%{$python_sitearch}
|
||||||
|
|
||||||
%check
|
%check
|
||||||
# GetZipBytesTest.test_get_encoded_zip_files - needs zip command
|
|
||||||
# test_egg - needs generated egg file
|
|
||||||
# test_doctest - weird doctest importing
|
|
||||||
# test_unicode - differs between py2/py3
|
|
||||||
# test_version - checks for non-compiled variant, we ship only compiled one
|
|
||||||
# test_multiprocessing_with_branching - whitespace issue in regexp
|
|
||||||
# test_farm, test_encoding, test_multi - tries to write in /usr
|
|
||||||
# test_dothtml_not_python - no idea
|
|
||||||
# test_bytes
|
|
||||||
# test_one_of
|
|
||||||
# test_xdist_sys_path_nuttiness_is_fixed - xdist check that we actually fail on purpose
|
|
||||||
# test_debug_sys_ctracer - requires dep on ctracer
|
|
||||||
export LANG=en_US.UTF8
|
export LANG=en_US.UTF8
|
||||||
%{python_expand # Link executables to flavor specific build areas, to be used for testing. build/ is shuffled around by python_expand
|
%{python_expand # Link executables to flavor specific build areas, to be used for testing. build/ is shuffled around by python_expand
|
||||||
mkdir build/bin
|
mkdir build/bin
|
||||||
@ -100,12 +74,35 @@ for filepath in %{buildroot}%{_bindir}/coverage*-%{$python_bin_suffix}; do
|
|||||||
unsuffixed=${filename/-%{$python_bin_suffix}/}
|
unsuffixed=${filename/-%{$python_bin_suffix}/}
|
||||||
ln -s $filepath build/bin/$unsuffixed
|
ln -s $filepath build/bin/$unsuffixed
|
||||||
done
|
done
|
||||||
|
# indicate a writeable .pth directory for tests
|
||||||
|
mkdir -p build/mysite
|
||||||
|
cp %{python_sitearch}/zzzz-import-failed-hooks.pth build/mysite/
|
||||||
}
|
}
|
||||||
|
# the tests need the empty leading part for importing local test projects"
|
||||||
|
export PYTHONPATH=":$PWD/build/mysite"
|
||||||
|
|
||||||
export PATH="$(pwd)/build/bin:$PATH"
|
export PATH="$(pwd)/build/bin:$PATH"
|
||||||
|
|
||||||
%python_exec -mcoverage debug sys
|
%python_exec -mcoverage debug sys
|
||||||
# the tests need the empty leading part for importing local test projects, the x is a dummy"
|
|
||||||
export PYTHONPATH=":x"
|
# installs some test modules into tests/ (flavor agnostic)
|
||||||
%pytest_arch -k 'not (test_get_encoded_zip_files or test_egg or test_doctest or test_unicode or test_version or test_multiprocessing_with_branching or test_farm or test_dothtml_not_python or test_one_of or test_bytes or test_encoding or test_multi or test_xdist_sys_path_nuttiness_is_fixed or test_debug_sys_ctracer)'
|
python3 igor.py zip_mods
|
||||||
|
|
||||||
|
# test_version - checks for non-compiled variant, we ship only compiled one
|
||||||
|
donttest="test_version"
|
||||||
|
# test_xdist_sys_path_nuttiness_is_fixed - xdist check that we actually fail on purpose
|
||||||
|
donttest+=" or test_xdist_sys_path_nuttiness_is_fixed"
|
||||||
|
# test_debug_sys_ctracer - requires dep on ctracer
|
||||||
|
donttest+=" or test_debug_sys_ctracer"
|
||||||
|
# does not find a usable venv
|
||||||
|
donttest+=" or test_venv"
|
||||||
|
# writes in /usr/
|
||||||
|
donttest+=" or test_process"
|
||||||
|
# requires additional plugins
|
||||||
|
donttest+=" or test_plugins"
|
||||||
|
|
||||||
|
%pytest_arch -n auto --no-flaky-report -k "$donttest" -rp ||:
|
||||||
|
%pytest_arch -n auto --no-flaky-report -k "not ($donttest)"
|
||||||
|
|
||||||
%post
|
%post
|
||||||
%python_install_alternative coverage
|
%python_install_alternative coverage
|
||||||
|
@ -1,66 +0,0 @@
|
|||||||
From 06cb51b39620e2140f915393f0f41b281594e05b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Ned Batchelder <ned@nedbatchelder.com>
|
|
||||||
Date: Sat, 8 May 2021 21:27:45 -0400
|
|
||||||
Subject: [PATCH] test: traced file names seem to be absolute now? #1161
|
|
||||||
|
|
||||||
This was changed in 3.10.0b1 and 3.9.5. Seems like a strange change to
|
|
||||||
throw into 3.9.5, but there it is. Fixes #1161.
|
|
||||||
---
|
|
||||||
tests/test_debug.py | 6 ++++--
|
|
||||||
tests/test_oddball.py | 16 +++++++++-------
|
|
||||||
2 files changed, 13 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
--- a/tests/test_debug.py
|
|
||||||
+++ b/tests/test_debug.py
|
|
||||||
@@ -124,8 +124,10 @@ class DebugTraceTest(CoverageTest):
|
|
||||||
def test_debug_trace(self):
|
|
||||||
out_lines = self.f1_debug_output(["trace"])
|
|
||||||
|
|
||||||
- # We should have a line like "Tracing 'f1.py'"
|
|
||||||
- assert "Tracing 'f1.py'" in out_lines
|
|
||||||
+ # We should have a line like "Tracing 'f1.py'", perhaps with an
|
|
||||||
+ # absolute path.
|
|
||||||
+ f1 = re_lines(out_lines, r"Tracing '.*f1.py'")
|
|
||||||
+ assert f1
|
|
||||||
|
|
||||||
# We should have lines like "Not tracing 'collector.py'..."
|
|
||||||
coverage_lines = re_lines(
|
|
||||||
--- a/tests/test_oddball.py
|
|
||||||
+++ b/tests/test_oddball.py
|
|
||||||
@@ -451,10 +451,12 @@ class GettraceTest(CoverageTest):
|
|
||||||
def test_setting_new_trace_function(self):
|
|
||||||
# https://github.com/nedbat/coveragepy/issues/436
|
|
||||||
self.check_coverage('''\
|
|
||||||
+ import os.path
|
|
||||||
import sys
|
|
||||||
|
|
||||||
def tracer(frame, event, arg):
|
|
||||||
- print("%s: %s @ %d" % (event, frame.f_code.co_filename, frame.f_lineno))
|
|
||||||
+ filename = os.path.basename(frame.f_code.co_filename)
|
|
||||||
+ print("%s: %s @ %d" % (event, filename, frame.f_lineno))
|
|
||||||
return tracer
|
|
||||||
|
|
||||||
def begin():
|
|
||||||
@@ -474,16 +476,16 @@ class GettraceTest(CoverageTest):
|
|
||||||
a = 21
|
|
||||||
b = 22
|
|
||||||
''',
|
|
||||||
- lines=[1, 3, 4, 5, 7, 8, 10, 11, 12, 14, 15, 16, 18, 19, 20, 21, 22],
|
|
||||||
- missing="4-5, 11-12",
|
|
||||||
+ lines=[1, 2, 4, 5, 6, 7, 9, 10, 12, 13, 14, 16, 17, 18, 20, 21, 22, 23, 24],
|
|
||||||
+ missing="5-7, 13-14",
|
|
||||||
)
|
|
||||||
|
|
||||||
out = self.stdout().replace(self.last_module_name, "coverage_test")
|
|
||||||
expected = (
|
|
||||||
- "call: coverage_test.py @ 10\n"
|
|
||||||
- "line: coverage_test.py @ 11\n"
|
|
||||||
- "line: coverage_test.py @ 12\n"
|
|
||||||
- "return: coverage_test.py @ 12\n"
|
|
||||||
+ "call: coverage_test.py @ 12\n"
|
|
||||||
+ "line: coverage_test.py @ 13\n"
|
|
||||||
+ "line: coverage_test.py @ 14\n"
|
|
||||||
+ "return: coverage_test.py @ 14\n"
|
|
||||||
)
|
|
||||||
assert expected == out
|
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user