Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-pytest-cov for 
openSUSE:Factory checked in at 2026-04-14 17:48:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-pytest-cov (Old)
 and      /work/SRC/openSUSE:Factory/.python-pytest-cov.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-pytest-cov"

Tue Apr 14 17:48:07 2026 rev:37 rq:1346235 version:7.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-pytest-cov/python-pytest-cov.changes      
2025-10-14 18:06:53.875180728 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-pytest-cov.new.21863/python-pytest-cov.changes
   2026-04-14 17:48:14.659353170 +0200
@@ -1,0 +2,28 @@
+Sun Apr 12 19:00:42 UTC 2026 - Dirk Müller <[email protected]>
+
+- update to 7.1.0:
+  * Fixed total coverage computation to always be consistent,
+    regardless of reporting settings. Previously some reports
+    could produce different total counts, and consequently can
+    make --cov-fail-under behave different depending on reporting
+    options. See #641.
+  * Improve handling of ResourceWarning from sqlite3. The plugin
+    adds warning filter for sqlite3 ResourceWarning unclosed
+    database (since 6.2.0). It checks if there is already
+    existing plugin for this message by comparing filter regular
+    expression. When filter is specified on command line the
+    message is escaped and does not match an expected message. A
+    check for an escaped regular expression is added to handle
+    this case. With this fix one can suppress ResourceWarning
+    from sqlite3 from command line:  pytest -W "ignore:unclosed
+    database in <sqlite3.Connection object at:ResourceWarning"
+  * Various improvements to documentation. Contributed by Art
+    Pelling in #718 and "vivodi" in #738. Also closed #736.
+  * Fixed some assertions in tests. Contributed by in Markéta
+    Machová in #722.
+  * Removed unnecessary coverage configuration copying (meant as
+    a backup because reporting commands had configuration side-
+    effects before coverage 5.0).
+- drop 0001-match-coverage-7.10.7-warnings.patch (upstream)
+
+-------------------------------------------------------------------

Old:
----
  0001-match-coverage-7.10.7-warnings.patch
  pytest_cov-7.0.0.tar.gz

New:
----
  _scmsync.obsinfo
  build.specials.obscpio
  pytest_cov-7.1.0.tar.gz

----------(Old B)----------
  Old:    effects before coverage 5.0).
- drop 0001-match-coverage-7.10.7-warnings.patch (upstream)
----------(Old E)----------

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-pytest-cov.spec ++++++
--- /var/tmp/diff_new_pack.cMwYY4/_old  2026-04-14 17:48:15.575391034 +0200
+++ /var/tmp/diff_new_pack.cMwYY4/_new  2026-04-14 17:48:15.575391034 +0200
@@ -26,14 +26,12 @@
 %endif
 %{?sle15_python_module_pythons}
 Name:           python-pytest-cov%{psuffix}
-Version:        7.0.0
+Version:        7.1.0
 Release:        0
 Summary:        Pytest plugin for coverage reporting
 License:        MIT
 URL:            https://github.com/pytest-dev/pytest-cov
 Source:         
https://files.pythonhosted.org/packages/source/p/pytest-cov/pytest_cov-%{version}.tar.gz
-# PATCH-FIX-UPSTREAM https://github.com/pytest-dev/pytest-cov/pull/722 match 
coverage 7.10.7 warnings
-Patch0:         0001-match-coverage-7.10.7-warnings.patch
 BuildRequires:  %{python_module base >= 3.9}
 BuildRequires:  %{python_module hatch-fancy-pypi-readme}
 BuildRequires:  %{python_module hatchling}
@@ -50,7 +48,7 @@
 BuildRequires:  python-rpm-macros
 Requires:       python-coverage >= 7.10.6
 Requires:       python-pluggy >= 1.2
-Requires:       python-pytest >= 6.2.5
+Requires:       python-pytest >= 7
 BuildArch:      noarch
 %python_subpackages
 

++++++ _scmsync.obsinfo ++++++
mtime: 1776020661
commit: 55df4e0eb09ad0196bf214cea1ad5f87d7132ac87ad16b72ca49735bf404c417
url: https://src.opensuse.org/python-pytest/python-pytest-cov.git
revision: 55df4e0eb09ad0196bf214cea1ad5f87d7132ac87ad16b72ca49735bf404c417
projectscmsync: https://src.opensuse.org/python-pytest/_ObsPrj.git

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2026-04-12 21:04:50.000000000 +0200
@@ -0,0 +1 @@
+.osc

++++++ pytest_cov-7.0.0.tar.gz -> pytest_cov-7.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.bumpversion.cfg 
new/pytest_cov-7.1.0/.bumpversion.cfg
--- old/pytest_cov-7.0.0/.bumpversion.cfg       2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/.bumpversion.cfg       2020-02-02 01:00:00.000000000 
+0100
@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 7.0.0
+current_version = 7.1.0
 commit = True
 tag = True
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.cookiecutterrc 
new/pytest_cov-7.1.0/.cookiecutterrc
--- old/pytest_cov-7.0.0/.cookiecutterrc        2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/.cookiecutterrc        2020-02-02 01:00:00.000000000 
+0100
@@ -40,7 +40,7 @@
     sphinx_doctest: 'no'
     sphinx_theme: sphinx-py3doc-enhanced-theme
     test_matrix_separate_coverage: 'no'
-    version: 7.0.0
+    version: 7.1.0
     version_manager: bump2version
     website: http://blog.ionelmc.ro
     year_from: '2010'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.editorconfig 
new/pytest_cov-7.1.0/.editorconfig
--- old/pytest_cov-7.0.0/.editorconfig  2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/.editorconfig  2020-02-02 01:00:00.000000000 +0100
@@ -10,6 +10,9 @@
 indent_size = 4
 charset = utf-8
 
+[*.py]
+max_line_length = 140
+
 [*.{bat,cmd,ps1}]
 end_of_line = crlf
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.github/workflows/test.yml 
new/pytest_cov-7.1.0/.github/workflows/test.yml
--- old/pytest_cov-7.0.0/.github/workflows/test.yml     2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/.github/workflows/test.yml     2020-02-02 
01:00:00.000000000 +0100
@@ -6,14 +6,14 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["pypy-3.9", "3.11"]
+        python-version: ["pypy-3.11", "3.11"]
         target: [
             "src-layout",
             "adhoc-layout",
         ]
         include:
           # Add new helper variables to existing jobs
-          - {python-version: "pypy-3.9", tox-python-version: "pypy3"}
+          - {python-version: "pypy-3.11", tox-python-version: "pypy11"}
           - {python-version: "3.11", tox-python-version: "py311"}
     steps:
       - uses: actions/checkout@v5
@@ -24,7 +24,7 @@
           python-version: ${{ matrix.python-version }}
 
       - name: Cache
-        uses: actions/cache@v4
+        uses: actions/cache@v5
         with:
           path: ~/.cache/pip
           key:
@@ -60,152 +60,170 @@
             toxpython: 'python3.11'
             tox_env: 'docs'
             os: 'ubuntu-latest'
-          - name: 'py39-pytest84-xdist38-coverage710 (ubuntu)'
-            python: '3.9'
-            toxpython: 'python3.9'
-            python_arch: 'x64'
-            tox_env: 'py39-pytest84-xdist38-coverage710'
-            os: 'ubuntu-latest'
-          - name: 'py39-pytest84-xdist38-coverage710 (windows)'
-            python: '3.9'
-            toxpython: 'python3.9'
-            python_arch: 'x64'
-            tox_env: 'py39-pytest84-xdist38-coverage710'
-            os: 'windows-latest'
-          - name: 'py39-pytest84-xdist38-coverage710 (macos)'
-            python: '3.9'
-            toxpython: 'python3.9'
-            python_arch: 'arm64'
-            tox_env: 'py39-pytest84-xdist38-coverage710'
-            os: 'macos-latest'
-          - name: 'py310-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'py310-pytest90-xdist38-coverage713 (ubuntu)'
             python: '3.10'
             toxpython: 'python3.10'
             python_arch: 'x64'
-            tox_env: 'py310-pytest84-xdist38-coverage710'
+            tox_env: 'py310-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'py310-pytest84-xdist38-coverage710 (windows)'
+          - name: 'py310-pytest90-xdist38-coverage713 (windows)'
             python: '3.10'
             toxpython: 'python3.10'
             python_arch: 'x64'
-            tox_env: 'py310-pytest84-xdist38-coverage710'
+            tox_env: 'py310-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'py310-pytest84-xdist38-coverage710 (macos)'
+          - name: 'py310-pytest90-xdist38-coverage713 (macos)'
             python: '3.10'
             toxpython: 'python3.10'
             python_arch: 'arm64'
-            tox_env: 'py310-pytest84-xdist38-coverage710'
+            tox_env: 'py310-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'py311-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'py311-pytest90-xdist38-coverage713 (ubuntu)'
             python: '3.11'
             toxpython: 'python3.11'
             python_arch: 'x64'
-            tox_env: 'py311-pytest84-xdist38-coverage710'
+            tox_env: 'py311-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'py311-pytest84-xdist38-coverage710 (windows)'
+          - name: 'py311-pytest90-xdist38-coverage713 (windows)'
             python: '3.11'
             toxpython: 'python3.11'
             python_arch: 'x64'
-            tox_env: 'py311-pytest84-xdist38-coverage710'
+            tox_env: 'py311-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'py311-pytest84-xdist38-coverage710 (macos)'
+          - name: 'py311-pytest90-xdist38-coverage713 (macos)'
             python: '3.11'
             toxpython: 'python3.11'
             python_arch: 'arm64'
-            tox_env: 'py311-pytest84-xdist38-coverage710'
+            tox_env: 'py311-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'py312-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'py312-pytest90-xdist38-coverage713 (ubuntu)'
             python: '3.12'
             toxpython: 'python3.12'
             python_arch: 'x64'
-            tox_env: 'py312-pytest84-xdist38-coverage710'
+            tox_env: 'py312-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'py312-pytest84-xdist38-coverage710 (windows)'
+          - name: 'py312-pytest90-xdist38-coverage713 (windows)'
             python: '3.12'
             toxpython: 'python3.12'
             python_arch: 'x64'
-            tox_env: 'py312-pytest84-xdist38-coverage710'
+            tox_env: 'py312-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'py312-pytest84-xdist38-coverage710 (macos)'
+          - name: 'py312-pytest90-xdist38-coverage713 (macos)'
             python: '3.12'
             toxpython: 'python3.12'
             python_arch: 'arm64'
-            tox_env: 'py312-pytest84-xdist38-coverage710'
+            tox_env: 'py312-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'py313-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'py313-pytest90-xdist38-coverage713 (ubuntu)'
             python: '3.13'
             toxpython: 'python3.13'
             python_arch: 'x64'
-            tox_env: 'py313-pytest84-xdist38-coverage710'
+            tox_env: 'py313-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'py313-pytest84-xdist38-coverage710 (windows)'
+          - name: 'py313-pytest90-xdist38-coverage713 (windows)'
             python: '3.13'
             toxpython: 'python3.13'
             python_arch: 'x64'
-            tox_env: 'py313-pytest84-xdist38-coverage710'
+            tox_env: 'py313-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'py313-pytest84-xdist38-coverage710 (macos)'
+          - name: 'py313-pytest90-xdist38-coverage713 (macos)'
             python: '3.13'
             toxpython: 'python3.13'
             python_arch: 'arm64'
-            tox_env: 'py313-pytest84-xdist38-coverage710'
+            tox_env: 'py313-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'pypy39-pytest84-xdist38-coverage710 (ubuntu)'
-            python: 'pypy-3.9'
-            toxpython: 'pypy3.9'
+          - name: 'py314-pytest90-xdist38-coverage713 (ubuntu)'
+            python: '3.14'
+            toxpython: 'python3.14'
             python_arch: 'x64'
-            tox_env: 'pypy39-pytest84-xdist38-coverage710'
+            tox_env: 'py314-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'pypy39-pytest84-xdist38-coverage710 (windows)'
-            python: 'pypy-3.9'
-            toxpython: 'pypy3.9'
+          - name: 'py314-pytest90-xdist38-coverage713 (windows)'
+            python: '3.14'
+            toxpython: 'python3.14'
             python_arch: 'x64'
-            tox_env: 'pypy39-pytest84-xdist38-coverage710'
+            tox_env: 'py314-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'pypy39-pytest84-xdist38-coverage710 (macos)'
-            python: 'pypy-3.9'
-            toxpython: 'pypy3.9'
+          - name: 'py314-pytest90-xdist38-coverage713 (macos)'
+            python: '3.14'
+            toxpython: 'python3.14'
             python_arch: 'arm64'
-            tox_env: 'pypy39-pytest84-xdist38-coverage710'
+            tox_env: 'py314-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'pypy310-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'pypy310-pytest90-xdist38-coverage713 (ubuntu)'
             python: 'pypy-3.10'
             toxpython: 'pypy3.10'
             python_arch: 'x64'
-            tox_env: 'pypy310-pytest84-xdist38-coverage710'
+            tox_env: 'pypy310-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'pypy310-pytest84-xdist38-coverage710 (windows)'
+          - name: 'pypy310-pytest90-xdist38-coverage713 (windows)'
             python: 'pypy-3.10'
             toxpython: 'pypy3.10'
             python_arch: 'x64'
-            tox_env: 'pypy310-pytest84-xdist38-coverage710'
+            tox_env: 'pypy310-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'pypy310-pytest84-xdist38-coverage710 (macos)'
+          - name: 'pypy310-pytest90-xdist38-coverage713 (macos)'
             python: 'pypy-3.10'
             toxpython: 'pypy3.10'
             python_arch: 'arm64'
-            tox_env: 'pypy310-pytest84-xdist38-coverage710'
+            tox_env: 'pypy310-pytest90-xdist38-coverage713'
             os: 'macos-latest'
-          - name: 'pypy311-pytest84-xdist38-coverage710 (ubuntu)'
+          - name: 'pypy311-pytest90-xdist38-coverage713 (ubuntu)'
             python: 'pypy-3.11'
             toxpython: 'pypy3.11'
             python_arch: 'x64'
-            tox_env: 'pypy311-pytest84-xdist38-coverage710'
+            tox_env: 'pypy311-pytest90-xdist38-coverage713'
             os: 'ubuntu-latest'
-          - name: 'pypy311-pytest84-xdist38-coverage710 (windows)'
+          - name: 'pypy311-pytest90-xdist38-coverage713 (windows)'
             python: 'pypy-3.11'
             toxpython: 'pypy3.11'
             python_arch: 'x64'
-            tox_env: 'pypy311-pytest84-xdist38-coverage710'
+            tox_env: 'pypy311-pytest90-xdist38-coverage713'
             os: 'windows-latest'
-          - name: 'pypy311-pytest84-xdist38-coverage710 (macos)'
+          - name: 'pypy311-pytest90-xdist38-coverage713 (macos)'
             python: 'pypy-3.11'
             toxpython: 'pypy3.11'
             python_arch: 'arm64'
-            tox_env: 'pypy311-pytest84-xdist38-coverage710'
+            tox_env: 'pypy311-pytest90-xdist38-coverage713'
+            os: 'macos-latest'
+          - name: 'py39-pytest80-xdist38-coverage710 (ubuntu)'
+            python: '3.9'
+            toxpython: 'python3.9'
+            python_arch: 'x64'
+            tox_env: 'py39-pytest80-xdist38-coverage710'
+            os: 'ubuntu-latest'
+          - name: 'py39-pytest80-xdist38-coverage710 (windows)'
+            python: '3.9'
+            toxpython: 'python3.9'
+            python_arch: 'x64'
+            tox_env: 'py39-pytest80-xdist38-coverage710'
+            os: 'windows-latest'
+          - name: 'py39-pytest80-xdist38-coverage710 (macos)'
+            python: '3.9'
+            toxpython: 'python3.9'
+            python_arch: 'arm64'
+            tox_env: 'py39-pytest80-xdist38-coverage710'
+            os: 'macos-latest'
+          - name: 'pypy39-pytest80-xdist38-coverage710 (ubuntu)'
+            python: 'pypy-3.9'
+            toxpython: 'pypy3.9'
+            python_arch: 'x64'
+            tox_env: 'pypy39-pytest80-xdist38-coverage710'
+            os: 'ubuntu-latest'
+          - name: 'pypy39-pytest80-xdist38-coverage710 (windows)'
+            python: 'pypy-3.9'
+            toxpython: 'pypy3.9'
+            python_arch: 'x64'
+            tox_env: 'pypy39-pytest80-xdist38-coverage710'
+            os: 'windows-latest'
+          - name: 'pypy39-pytest80-xdist38-coverage710 (macos)'
+            python: 'pypy-3.9'
+            toxpython: 'pypy3.9'
+            python_arch: 'arm64'
+            tox_env: 'pypy39-pytest80-xdist38-coverage710'
             os: 'macos-latest'
     steps:
-    - uses: actions/checkout@v5
+    - uses: actions/checkout@v6
       with:
         fetch-depth: 0
     - uses: actions/setup-python@v6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.pre-commit-config.yaml 
new/pytest_cov-7.1.0/.pre-commit-config.yaml
--- old/pytest_cov-7.0.0/.pre-commit-config.yaml        2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/.pre-commit-config.yaml        2020-02-02 
01:00:00.000000000 +0100
@@ -1,12 +1,12 @@
 # To install the git pre-commit hooks run:
-#   pre-commit install --install-hooks
+#   prek install --install-hooks --overwrite
 # To update the versions:
-#   pre-commit autoupdate
+#   prek autoupdate
 exclude: '^(\.tox|ci/templates|\.bumpversion\.cfg)(/|$)'
 # Note the order is intentional to avoid multiple passes of the hooks
 repos:
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: v0.12.12
+    rev: v0.15.4
     hooks:
       - id: ruff
         args: [--fix, --exit-non-zero-on-fix, --show-fixes, --unsafe-fixes]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/.readthedocs.yml 
new/pytest_cov-7.1.0/.readthedocs.yml
--- old/pytest_cov-7.0.0/.readthedocs.yml       2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/.readthedocs.yml       2020-02-02 01:00:00.000000000 
+0100
@@ -4,7 +4,7 @@
   configuration: docs/conf.py
 formats: all
 build:
-  os: ubuntu-22.04
+  os: ubuntu-24.04
   tools:
     python: "3"
 python:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/AUTHORS.rst 
new/pytest_cov-7.1.0/AUTHORS.rst
--- old/pytest_cov-7.0.0/AUTHORS.rst    2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/AUTHORS.rst    2020-02-02 01:00:00.000000000 +0100
@@ -65,3 +65,5 @@
 * Tsvika Shapira - https://github.com/tsvikas
 * Marcos Boger - https://github.com/marcosboger
 * Ofek Lev - https://github.com/ofek
+* Art Pelling - https://github.com/artpelling
+* Markéta Machová - https://github.com/MeggyCal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/CHANGELOG.rst 
new/pytest_cov-7.1.0/CHANGELOG.rst
--- old/pytest_cov-7.0.0/CHANGELOG.rst  2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/CHANGELOG.rst  2020-02-02 01:00:00.000000000 +0100
@@ -2,6 +2,32 @@
 Changelog
 =========
 
+7.1.0 (2026-03-21)
+------------------
+
+* Fixed total coverage computation to always be consistent, regardless of 
reporting settings.
+  Previously some reports could produce different total counts, and 
consequently can make --cov-fail-under behave different depending on
+  reporting options.
+  See `#641 <https://github.com/pytest-dev/pytest-cov/issues/641>`_.
+
+* Improve handling of ResourceWarning from sqlite3.
+
+  The plugin adds warning filter for sqlite3 ``ResourceWarning`` unclosed 
database (since 6.2.0).
+  It checks if there is already existing plugin for this message by comparing 
filter regular expression.
+  When filter is specified on command line the message is escaped and does not 
match an expected message.
+  A check for an escaped regular expression is added to handle this case.
+
+  With this fix one can suppress ``ResourceWarning`` from sqlite3 from command 
line::
+
+    pytest -W "ignore:unclosed database in <sqlite3.Connection object 
at:ResourceWarning" ...
+* Various improvements to documentation.
+  Contributed by Art Pelling in `#718 
<https://github.com/pytest-dev/pytest-cov/pull/718>`_ and
+  "vivodi" in `#738 <https://github.com/pytest-dev/pytest-cov/pull/738>`_.
+  Also closed `#736 <https://github.com/pytest-dev/pytest-cov/issues/736>`_.
+* Fixed some assertions in tests.
+  Contributed by in Markéta Machová in `#722 
<https://github.com/pytest-dev/pytest-cov/pull/722>`_.
+* Removed unnecessary coverage configuration copying (meant as a backup 
because reporting commands had configuration side-effects before coverage 5.0).
+
 7.0.0 (2025-09-09)
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/PKG-INFO 
new/pytest_cov-7.1.0/PKG-INFO
--- old/pytest_cov-7.0.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/PKG-INFO       2020-02-02 01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: pytest-cov
-Version: 7.0.0
+Version: 7.1.0
 Summary: Pytest plugin for measuring coverage.
 Project-URL: Sources, https://github.com/pytest-dev/pytest-cov
 Project-URL: Documentation, https://pytest-cov.readthedocs.io/
@@ -27,6 +27,7 @@
 Classifier: Programming Language :: Python :: 3.11
 Classifier: Programming Language :: Python :: 3.12
 Classifier: Programming Language :: Python :: 3.13
+Classifier: Programming Language :: Python :: 3.14
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
 Classifier: Topic :: Software Development :: Testing
@@ -83,9 +84,9 @@
     :alt: Supported implementations
     :target: https://pypi.org/project/pytest-cov
 
-.. |commits-since| image:: 
https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v7.0.0.svg
+.. |commits-since| image:: 
https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v7.1.0.svg
     :alt: Commits since latest release
-    :target: https://github.com/pytest-dev/pytest-cov/compare/v7.0.0...master
+    :target: https://github.com/pytest-dev/pytest-cov/compare/v7.1.0...master
 
 .. end-badges
 
@@ -198,6 +199,32 @@
 Changelog
 =========
 
+7.1.0 (2026-03-21)
+------------------
+
+* Fixed total coverage computation to always be consistent, regardless of 
reporting settings.
+  Previously some reports could produce different total counts, and 
consequently can make --cov-fail-under behave different depending on
+  reporting options.
+  See `#641 <https://github.com/pytest-dev/pytest-cov/issues/641>`_.
+
+* Improve handling of ResourceWarning from sqlite3.
+
+  The plugin adds warning filter for sqlite3 ``ResourceWarning`` unclosed 
database (since 6.2.0).
+  It checks if there is already existing plugin for this message by comparing 
filter regular expression.
+  When filter is specified on command line the message is escaped and does not 
match an expected message.
+  A check for an escaped regular expression is added to handle this case.
+
+  With this fix one can suppress ``ResourceWarning`` from sqlite3 from command 
line::
+
+    pytest -W "ignore:unclosed database in <sqlite3.Connection object 
at:ResourceWarning" ...
+* Various improvements to documentation.
+  Contributed by Art Pelling in `#718 
<https://github.com/pytest-dev/pytest-cov/pull/718>`_ and
+  "vivodi" in `#738 <https://github.com/pytest-dev/pytest-cov/pull/738>`_.
+  Also closed `#736 <https://github.com/pytest-dev/pytest-cov/issues/736>`_.
+* Fixed some assertions in tests.
+  Contributed by in Markéta Machová in `#722 
<https://github.com/pytest-dev/pytest-cov/pull/722>`_.
+* Removed unnecessary coverage configuration copying (meant as a backup 
because reporting commands had configuration side-effects before coverage 5.0).
+
 7.0.0 (2025-09-09)
 ------------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/README.rst 
new/pytest_cov-7.1.0/README.rst
--- old/pytest_cov-7.0.0/README.rst     2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/README.rst     2020-02-02 01:00:00.000000000 +0100
@@ -40,9 +40,9 @@
     :alt: Supported implementations
     :target: https://pypi.org/project/pytest-cov
 
-.. |commits-since| image:: 
https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v7.0.0.svg
+.. |commits-since| image:: 
https://img.shields.io/github/commits-since/pytest-dev/pytest-cov/v7.1.0.svg
     :alt: Commits since latest release
-    :target: https://github.com/pytest-dev/pytest-cov/compare/v7.0.0...master
+    :target: https://github.com/pytest-dev/pytest-cov/compare/v7.1.0...master
 
 .. end-badges
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/ci/bootstrap.py 
new/pytest_cov-7.1.0/ci/bootstrap.py
--- old/pytest_cov-7.0.0/ci/bootstrap.py        2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/ci/bootstrap.py        2020-02-02 01:00:00.000000000 
+0100
@@ -57,7 +57,7 @@
         # This uses sys.executable the same way that the call in
         # cookiecutter-pylibrary/hooks/post_gen_project.py
         # invokes this bootstrap.py itself.
-        for line in subprocess.check_output([sys.executable, '-m', 'tox', 
'--listenvs'], universal_newlines=True).splitlines()
+        for line in subprocess.check_output([sys.executable, '-m', 'tox', 
'--listenvs'], text=True).splitlines()
     ]
     tox_environments = [line for line in tox_environments if 
line.startswith('py')]
     for template in templates_path.rglob('*'):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/pytest_cov-7.0.0/ci/templates/.github/workflows/test.yml 
new/pytest_cov-7.1.0/ci/templates/.github/workflows/test.yml
--- old/pytest_cov-7.0.0/ci/templates/.github/workflows/test.yml        
2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/ci/templates/.github/workflows/test.yml        
2020-02-02 01:00:00.000000000 +0100
@@ -7,14 +7,14 @@
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["pypy-3.9", "3.11"]
+        python-version: ["pypy-3.11", "3.11"]
         target: [
             "src-layout",
             "adhoc-layout",
         ]
         include:
           # Add new helper variables to existing jobs
-          - {python-version: "pypy-3.9", tox-python-version: "pypy3"}
+          - {python-version: "pypy-3.11", tox-python-version: "pypy11"}
           - {python-version: "3.11", tox-python-version: "py311"}
     steps:
       - uses: actions/checkout@v5
@@ -25,7 +25,7 @@
           python-version: ${{ matrix.python-version }}
 
       - name: Cache
-        uses: actions/cache@v4
+        uses: actions/cache@v5
         with:
           path: ~/.cache/pip
           key:
@@ -88,7 +88,7 @@
 {% endfor %}
 {% endfor %}
     steps:
-    - uses: actions/checkout@v5
+    - uses: actions/checkout@v6
       with:
         fetch-depth: 0
     - uses: actions/setup-python@v6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/docs/conf.py 
new/pytest_cov-7.1.0/docs/conf.py
--- old/pytest_cov-7.0.0/docs/conf.py   2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/docs/conf.py   2020-02-02 01:00:00.000000000 +0100
@@ -21,7 +21,7 @@
 year = '2010-2024'
 author = 'pytest-cov contributors'
 copyright = f'{year}, {author}'
-version = release = '7.0.0'
+version = release = '7.1.0'
 
 pygments_style = 'trac'
 templates_path = ['.']
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/docs/config.rst 
new/pytest_cov-7.1.0/docs/config.rst
--- old/pytest_cov-7.0.0/docs/config.rst        2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/docs/config.rst        2020-02-02 01:00:00.000000000 
+0100
@@ -2,24 +2,25 @@
 Configuration
 =============
 
-This plugin provides a clean minimal set of command line options that are 
added to pytest.  For
-further control of coverage use a coverage config file.
+This plugin provides a clean minimal set of command line options that are 
added to pytest. For
+further control of coverage use a `coverage config file`_.
 
-For example if tests are contained within the directory tree being measured 
the tests may be
-excluded if desired by using a .coveragerc file with the omit option set::
+CLI options:
+  --cov [SOURCE]        Path or package name to measure during execution 
(multi-allowed). Use --cov= to not do any source filtering and record 
everything.
+  --cov-reset           Reset cov sources accumulated in options so far.
+  --cov-report TYPE     Type of report to generate: term, term-missing, 
annotate, html, xml, json, markdown, markdown-append, lcov (multi-allowed). 
term, term-missing may be followed by ":skip-covered".
+                        annotate, html, xml, json, markdown, markdown-append 
and lcov may be followed by ":DEST" where DEST specifies the output location. 
Use --cov-report= to not generate any output.
+  --cov-config PATH     Config file for coverage. Default: .coveragerc
+  --no-cov-on-fail      Do not report coverage if test run fails. Default: 
False
+  --no-cov              Disable coverage report completely (useful for 
debuggers). Default: False
+  --cov-fail-under MIN  Fail if the total coverage is less than MIN.
+  --cov-append          Do not delete coverage but append to current. Default: 
False
+  --cov-branch          Enable branch coverage. Can also be specified in the 
`coverage config file`_ ``[run]`` section.
+  --cov-precision COV_PRECISION
+                        Override the reporting precision. Can also be 
specified in the `coverage config file`_ ``[report]`` section.
+  --cov-context CONTEXT
+                        Dynamic contexts to use. "test" for now.
 
-    pytest --cov-config=.coveragerc
-           --cov=myproj
-           myproj/tests/
-
-Where the .coveragerc file contains file globs::
-
-    [run]
-    omit = tests/*
-
-For full details refer to the `coverage config file`_ documentation.
-
-.. _`coverage config file`: 
https://coverage.readthedocs.io/en/latest/config.html
 
 .. note:: Important Note
 
@@ -32,7 +33,7 @@
 
     If you use the ``--cov-branch`` option then coverage's ``branch`` option 
will also get overridden.
 
-If you wish to always add pytest-cov with pytest, you can use ``addopts`` 
under the ``pytest`` or ``tool:pytest`` section of
+If you wish to always run pytest-cov with pytest, you can use ``addopts`` 
under the ``pytest`` or ``tool:pytest`` section of
 your ``setup.cfg``, or the ``tool.pytest.ini_options`` section of your 
``pyproject.toml`` file.
 
 For example, in ``setup.cfg``: ::
@@ -45,6 +46,12 @@
     [tool.pytest.ini_options]
     addopts = "--cov=<project-name> --cov-report html"
 
+
+.. note:: Important Note
+
+    The ``--cov`` option has an optional argument. If it's your last option in 
addopts_ it might eat the next CLI argument, make sure to
+    force it to take a blank value if that's what you wanted by using 
``--cov=`` (essentially the same as ``--cov=""``).
+
 Caveats
 =======
 
@@ -57,27 +64,5 @@
 Also, if you change the working directory and also use subprocesses in a test 
you might also need to use ``--cov-config`` to make pytest-cov
 use the expected configuration file in the subprocess.
 
-Reference
-=========
-
-The complete list of command line options is:
-
---cov=PATH            Measure coverage for filesystem path. (multi-allowed)
---cov-report=type     Type of report to generate: term, term-missing,
-                      annotate, html, xml, json, markdown, markdown-append, 
lcov (multi-allowed). term, term-
-                      missing may be followed by ":skip-covered". annotate,
-                      html, xml, json, markdown, markdown-append and lcov may 
be followed by ":DEST" where DEST
-                      specifies the output location. Use --cov-report= to
-                      not generate any output.
---cov-config=path     Config file for coverage. Default: .coveragerc
---no-cov-on-fail      Do not report coverage if test run fails. Default:
-                      False
---no-cov              Disable coverage report completely (useful for
-                      debuggers). Default: False
---cov-reset           Reset cov sources accumulated in options so far.
-                      Mostly useful for scripts and configuration files.
---cov-fail-under=MIN  Fail if the total coverage is less than MIN.
---cov-append          Do not delete coverage but append to current. Default:
-                      False
---cov-branch          Enable branch coverage.
---cov-context         Choose the method for setting the dynamic context.
+.. _`coverage config file`: 
https://coverage.readthedocs.io/en/latest/config.html
+.. _addopts: 
https://docs.pytest.org/en/stable/reference/reference.html#confval-addopts>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/docs/reporting.rst 
new/pytest_cov-7.1.0/docs/reporting.rst
--- old/pytest_cov-7.0.0/docs/reporting.rst     2020-02-02 01:00:00.000000000 
+0100
+++ new/pytest_cov-7.1.0/docs/reporting.rst     2020-02-02 01:00:00.000000000 
+0100
@@ -49,7 +49,7 @@
 
 You can use ``skip-covered`` with ``term-missing`` as well. e.g. 
``--cov-report term-missing:skip-covered``
 
-If any reporting options are used then the default (``--cov-report=term`` is 
not added automatically). For example this would not show any
+If any reporting options are used then the default (``--cov-report=term``) is 
not added automatically. For example this would not show any
 terminal output:
 
 .. code-block:: bash
@@ -82,7 +82,7 @@
 
 .. code-block:: bash
 
-    pytest --cov-report=markdown-append:${GITHUB_STEP_SUMMARY}.
+    pytest --cov-report markdown-append:$GITHUB_STEP_SUMMARY
            --cov=myproj tests/
 
 To disable the default ``term`` report provide an empty report:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/examples/adhoc-layout/.coveragerc 
new/pytest_cov-7.1.0/examples/adhoc-layout/.coveragerc
--- old/pytest_cov-7.0.0/examples/adhoc-layout/.coveragerc      2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/examples/adhoc-layout/.coveragerc      2020-02-02 
01:00:00.000000000 +0100
@@ -5,11 +5,10 @@
 
 [run]
 branch = true
-parallel = true
 source =
     example
     .
 
 [report]
-show_missing = true
 precision = 2
+show_missing = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/examples/adhoc-layout/tox.ini 
new/pytest_cov-7.1.0/examples/adhoc-layout/tox.ini
--- old/pytest_cov-7.0.0/examples/adhoc-layout/tox.ini  2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/examples/adhoc-layout/tox.ini  2020-02-02 
01:00:00.000000000 +0100
@@ -1,14 +1,12 @@
 [tox]
-envlist = pypy3,py39,report
+envlist = clean,pypy311,py311,report
 
 [tool:pytest]
 addopts =
     --cov-report=term-missing
 
 [testenv]
-setenv =
-    py{py3,39}: COVERAGE_FILE = .coverage.{envname}
-commands = pytest --cov --cov-config={toxinidir}/.coveragerc {posargs:-vv}
+commands = pytest --cov --cov-append --cov-config={toxinidir}/.coveragerc 
{posargs:-vv}
 deps =
     pytest
     coverage
@@ -19,15 +17,20 @@
     ../..
 
 depends =
-    report: pypy3,py39
+    report: pypy311,py311
+    {pypy311,py311}: clean
 
 # note that this is necessary to prevent the tests importing the code from 
your badly laid project
 changedir = tests
 
+[testenv:clean]
+skip_install = true
+deps = coverage
+commands =
+    coverage erase
+
 [testenv:report]
 skip_install = true
 deps = coverage
 commands =
-    coverage combine
-    coverage html
     coverage report --fail-under=100
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/examples/src-layout/.coveragerc 
new/pytest_cov-7.1.0/examples/src-layout/.coveragerc
--- old/pytest_cov-7.0.0/examples/src-layout/.coveragerc        2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/examples/src-layout/.coveragerc        2020-02-02 
01:00:00.000000000 +0100
@@ -5,11 +5,10 @@
 
 [run]
 branch = true
-parallel = true
 source =
     src/example
     tests
 
 [report]
-show_missing = true
 precision = 2
+show_missing = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/examples/src-layout/tox.ini 
new/pytest_cov-7.1.0/examples/src-layout/tox.ini
--- old/pytest_cov-7.0.0/examples/src-layout/tox.ini    2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/examples/src-layout/tox.ini    2020-02-02 
01:00:00.000000000 +0100
@@ -1,5 +1,5 @@
 [tox]
-envlist = clean,pypy310,py310,report
+envlist = clean,pypy311,py311,report
 
 [tool:pytest]
 testpaths = tests
@@ -18,8 +18,8 @@
     ../..
 
 depends =
-    report: pypy310,py310
-    {pypy310,py310}: clean
+    report: pypy311,py311
+    {pypy311,py311}: clean
 
 [testenv:clean]
 skip_install = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/pyproject.toml 
new/pytest_cov-7.1.0/pyproject.toml
--- old/pytest_cov-7.0.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/pyproject.toml 2020-02-02 01:00:00.000000000 +0100
@@ -5,7 +5,7 @@
 [project]
 name = "pytest-cov"
 dynamic = ["readme"]
-version = "7.0.0"
+version = "7.1.0"
 description = "Pytest plugin for measuring coverage."
 license = "MIT"
 requires-python = ">=3.9"
@@ -39,6 +39,7 @@
     "Programming Language :: Python :: 3.11",
     "Programming Language :: Python :: 3.12",
     "Programming Language :: Python :: 3.13",
+    "Programming Language :: Python :: 3.14",
     "Programming Language :: Python :: Implementation :: CPython",
     "Programming Language :: Python :: Implementation :: PyPy",
     "Topic :: Software Development :: Testing",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/src/pytest_cov/__init__.py 
new/pytest_cov-7.1.0/src/pytest_cov/__init__.py
--- old/pytest_cov-7.0.0/src/pytest_cov/__init__.py     2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/src/pytest_cov/__init__.py     2020-02-02 
01:00:00.000000000 +0100
@@ -1,6 +1,6 @@
 """pytest-cov: avoid already-imported warning: PYTEST_DONT_REWRITE."""
 
-__version__ = '7.0.0'
+__version__ = '7.1.0'
 
 import pytest
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/src/pytest_cov/engine.py 
new/pytest_cov-7.1.0/src/pytest_cov/engine.py
--- old/pytest_cov-7.0.0/src/pytest_cov/engine.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/src/pytest_cov/engine.py       2020-02-02 
01:00:00.000000000 +0100
@@ -2,7 +2,6 @@
 
 import argparse
 import contextlib
-import copy
 import functools
 import os
 import random
@@ -31,16 +30,6 @@
         pass
 
 
[email protected]
-def _backup(obj, attr):
-    backup = getattr(obj, attr)
-    try:
-        setattr(obj, attr, copy.copy(backup))
-        yield
-    finally:
-        setattr(obj, attr, backup)
-
-
 def _ensure_topdir(meth):
     @functools.wraps(meth)
     def ensure_topdir_wrapper(self, *args, **kwargs):
@@ -150,11 +139,8 @@
     @_ensure_topdir
     def summary(self, stream):
         """Produce coverage reports."""
-        total = None
 
-        if not self.cov_report:
-            with _backup(self.cov, 'config'):
-                return self.cov.report(show_missing=True, ignore_errors=True, 
file=_NullFile)
+        total = self.cov.report(ignore_errors=True, output_format='total', 
precision=self.cov_precision, file=_NullFile)
 
         # Output coverage section header.
         if len(self.node_descs) == 1:
@@ -181,20 +167,17 @@
             }
             skip_covered = isinstance(self.cov_report, dict) and 
'skip-covered' in self.cov_report.values()
             options.update({'skip_covered': skip_covered or None})
-            with _backup(self.cov, 'config'):
-                total = self.cov.report(**options)
+            self.cov.report(**options)
 
         # Produce annotated source code report if wanted.
         if 'annotate' in self.cov_report:
             annotate_dir = self.cov_report['annotate']
 
-            with _backup(self.cov, 'config'):
-                self.cov.annotate(ignore_errors=True, directory=annotate_dir)
+            self.cov.annotate(ignore_errors=True, directory=annotate_dir)
             # We need to call Coverage.report here, just to get the total
             # Coverage.annotate don't return any total and we need it for 
--cov-fail-under.
 
-            with _backup(self.cov, 'config'):
-                total = self.cov.report(ignore_errors=True, file=_NullFile)
+            self.cov.report(ignore_errors=True, file=_NullFile)
             if annotate_dir:
                 stream.write(f'Coverage annotated source written to dir 
{annotate_dir}\n')
             else:
@@ -203,49 +186,43 @@
         # Produce html report if wanted.
         if 'html' in self.cov_report:
             output = self.cov_report['html']
-            with _backup(self.cov, 'config'):
-                total = self.cov.html_report(ignore_errors=True, 
directory=output)
+            self.cov.html_report(ignore_errors=True, directory=output)
             stream.write(f'Coverage HTML written to dir 
{self.cov.config.html_dir if output is None else output}\n')
 
         # Produce xml report if wanted.
         if 'xml' in self.cov_report:
             output = self.cov_report['xml']
-            with _backup(self.cov, 'config'):
-                total = self.cov.xml_report(ignore_errors=True, outfile=output)
+            self.cov.xml_report(ignore_errors=True, outfile=output)
             stream.write(f'Coverage XML written to file 
{self.cov.config.xml_output if output is None else output}\n')
 
         # Produce json report if wanted
         if 'json' in self.cov_report:
             output = self.cov_report['json']
-            with _backup(self.cov, 'config'):
-                total = self.cov.json_report(ignore_errors=True, 
outfile=output)
+            self.cov.json_report(ignore_errors=True, outfile=output)
             stream.write('Coverage JSON written to file %s\n' % 
(self.cov.config.json_output if output is None else output))
 
         # Produce Markdown report if wanted.
         if 'markdown' in self.cov_report:
             output = self.cov_report['markdown']
-            with _backup(self.cov, 'config'):
-                with Path(output).open('w') as output_file:
-                    total = self.cov.report(ignore_errors=True, 
file=output_file, output_format='markdown')
+            with Path(output).open('w') as output_file:
+                self.cov.report(ignore_errors=True, file=output_file, 
output_format='markdown')
             stream.write(f'Coverage Markdown information written to file 
{output}\n')
 
         # Produce Markdown report if wanted, appending to output file
         if 'markdown-append' in self.cov_report:
             output = self.cov_report['markdown-append']
-            with _backup(self.cov, 'config'):
-                with Path(output).open('a') as output_file:
-                    total = self.cov.report(ignore_errors=True, 
file=output_file, output_format='markdown')
+            with Path(output).open('a') as output_file:
+                self.cov.report(ignore_errors=True, file=output_file, 
output_format='markdown')
             stream.write(f'Coverage Markdown information appended to file 
{output}\n')
 
         # Produce lcov report if wanted.
         if 'lcov' in self.cov_report:
             output = self.cov_report['lcov']
-            with _backup(self.cov, 'config'):
-                self.cov.lcov_report(ignore_errors=True, outfile=output)
+            self.cov.lcov_report(ignore_errors=True, outfile=output)
 
-                # We need to call Coverage.report here, just to get the total
-                # Coverage.lcov_report doesn't return any total and we need it 
for --cov-fail-under.
-                total = self.cov.report(ignore_errors=True, file=_NullFile)
+            # We need to call Coverage.report here, just to get the total
+            # Coverage.lcov_report doesn't return any total and we need it for 
--cov-fail-under.
+            self.cov.report(ignore_errors=True, file=_NullFile)
 
             stream.write(f'Coverage LCOV written to file 
{self.cov.config.lcov_output if output is None else output}\n')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/src/pytest_cov/plugin.py 
new/pytest_cov-7.1.0/src/pytest_cov/plugin.py
--- old/pytest_cov-7.0.0/src/pytest_cov/plugin.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/src/pytest_cov/plugin.py       2020-02-02 
01:00:00.000000000 +0100
@@ -17,7 +17,10 @@
 if TYPE_CHECKING:
     from .engine import CovController
 
+# The message is unescaped if it comes from configuration file, and escaped if
+# it comes from command line option (-W) or PYTHONWARNINGS envvar.
 COVERAGE_SQLITE_WARNING_RE = re.compile('unclosed database in 
<sqlite3.Connection object at', re.I)
+COVERAGE_SQLITE_WARNING_RE2 = re.compile('unclosed\\ database\\ in\\ 
<sqlite3\\.Connection\\ object\\ at', re.I)
 
 
 def validate_report(arg):
@@ -325,7 +328,7 @@
 
         # we add default warning configuration to prevent certain warnings to 
bubble up as errors due to rigid filterwarnings configuration
         for _, message, category, _, _ in warnings.filters:
-            if category is ResourceWarning and message == 
COVERAGE_SQLITE_WARNING_RE:
+            if category is ResourceWarning and message in 
(COVERAGE_SQLITE_WARNING_RE, COVERAGE_SQLITE_WARNING_RE2):
                 break
         else:
             warnings.filterwarnings('default', 'unclosed database in 
<sqlite3.Connection object at', ResourceWarning)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/tests/test_pytest_cov.py 
new/pytest_cov-7.1.0/tests/test_pytest_cov.py
--- old/pytest_cov-7.0.0/tests/test_pytest_cov.py       2020-02-02 
01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/tests/test_pytest_cov.py       2020-02-02 
01:00:00.000000000 +0100
@@ -494,6 +494,28 @@
     result.stdout.fnmatch_lines(['Required test coverage of 50% reached. Total 
coverage: *%'])
 
 
+def test_cov_reporting_bug_641(testdir, monkeypatch):
+    testdir.tmpdir.mkdir('src').join('foo.py').write('')
+    testdir.tmpdir.mkdir('tests').join('test_foo.py').write("""
+import foo
+
+def test_foo():
+    pass
+""")
+    testdir.tmpdir.join('.coveragerc').write("""
+[run]
+relative_files = True
+source = src, tests
+""")
+    monkeypatch.setitem(os.environ, 'PYTHONPATH', 
os.pathsep.join([os.environ.get('PYTHONPATH', ''), 'src']))
+    result = testdir.runpytest('-v', '--cov=src', '--cov-report=xml', 
'--cov-fail-under=100')
+    assert result.ret == 0
+    result.stdout.fnmatch_lines(['Required test coverage of 100% reached. 
Total coverage: *%'])
+    result = testdir.runpytest('-v', '--cov=src', '--cov-report=', 
'--cov-fail-under=100')
+    assert result.ret == 0
+    result.stdout.fnmatch_lines(['Required test coverage of 100% reached. 
Total coverage: *%'])
+
+
 def test_cov_min_float_value(testdir):
     script = testdir.makepyfile(SCRIPT)
 
@@ -1435,8 +1457,8 @@
     result.stdout.fnmatch_lines(['* 1 passed *'])
     result.stderr.fnmatch_lines(
         [
-            '* (module-not-measured)',
-            '* (no-data-collected)',
+            '* (module-not-measured)*',
+            '* (no-data-collected)*',
             '* CovReportWarning: Failed to generate report: No data to 
report.',
         ]
     )
@@ -1965,6 +1987,9 @@
     with Path(__file__).parent.joinpath('contextful.py').open() as f:
         contextful_tests = f.read()
     script = testdir.makepyfile(contextful_tests)
+    testdir.tmpdir.join('.coveragerc').write("""[run]
+core = ctrace""")
+
     result = testdir.runpytest('-v', f'--cov={script.dirpath()}', 
'--cov-context=test', script, *opts.split())
     assert result.ret == 0
     result.stdout.fnmatch_lines(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pytest_cov-7.0.0/tox.ini new/pytest_cov-7.1.0/tox.ini
--- old/pytest_cov-7.0.0/tox.ini        2020-02-02 01:00:00.000000000 +0100
+++ new/pytest_cov-7.1.0/tox.ini        2020-02-02 01:00:00.000000000 +0100
@@ -15,22 +15,12 @@
     clean,
     check,
     docs,
-    
{py39,py310,py311,py312,py313,pypy39,pypy310,pypy311}-{pytest84}-{xdist38}-{coverage710},
+    
{py310,py311,py312,py313,py314,pypy310,pypy311}-{pytest90}-{xdist38}-{coverage713},
+    {py39,pypy39}-{pytest80}-{xdist38}-{coverage710},
     report
 ignore_basepython_conflict = true
 
 [testenv]
-basepython =
-    pypy38: {env:TOXPYTHON:pypy3.8}
-    pypy39: {env:TOXPYTHON:pypy3.9}
-    pypy310: {env:TOXPYTHON:pypy3.10}
-    py38: {env:TOXPYTHON:python3.8}
-    py39: {env:TOXPYTHON:python3.9}
-    py310: {env:TOXPYTHON:python3.10}
-    py311: {env:TOXPYTHON:python3.11}
-    py312: {env:TOXPYTHON:python3.12}
-    py313: {env:TOXPYTHON:python3.13}
-    {bootstrap,clean,check,report,docs}: {env:TOXPYTHON:python3}
 extras = testing
 setenv =
     PYTHONPATH={toxinidir}/tests
@@ -43,6 +33,7 @@
     pytest82:  _DEP_PYTEST=pytest==8.2.2
     pytest83:  _DEP_PYTEST=pytest==8.3.5
     pytest84:  _DEP_PYTEST=pytest==8.4.2
+    pytest90:  _DEP_PYTEST=pytest==9.0.2
 
     xdist32: _DEP_PYTESTXDIST=pytest-xdist==3.2.0
     xdist33: _DEP_PYTESTXDIST=pytest-xdist==3.3.1
@@ -61,7 +52,11 @@
     coverage77: _DEP_COVERAGE=coverage==7.7.1
     coverage78: _DEP_COVERAGE=coverage==7.8.2
     coverage79: _DEP_COVERAGE=coverage==7.9.2
-    coverage710: _DEP_COVERAGE=coverage==7.10.6
+    coverage710: _DEP_COVERAGE=coverage==7.10.7
+    coverage711: _DEP_COVERAGE=coverage==7.11.3
+    coverage712: _DEP_COVERAGE=coverage==7.12.0
+    coverage713: _DEP_COVERAGE=coverage==7.13.5
+
     # For testing against a coverage.py working tree.
     coveragedev: _DEP_COVERAGE=-e{env:COVERAGE_HOME}
 passenv =

Reply via email to