fix: generate xml report packages correctly on windows#1574
fix: generate xml report packages correctly on windows#1574nedbat merged 3 commits intocoveragepy:masterfrom bparzella:xml_duplicate_fix
Conversation
| rel_name = filename[len(source_path)+1:] | ||
| break | ||
| else: | ||
| rel_name = fr.relative_filename() |
There was a problem hiding this comment.
If the for loop is run, the rel_name is generated from filename which is already converted from backslash to slash in line 177
When the else branch is run, rel_name is generated from the FileReporter which needs the conversion
|
Coming here from the Coverage.py Mastodon request for someone on a Windows machine to validate this. I cloned this repo and checked out the PR. I installed it in a virtual environment on Python 3.11 with @nedbat Is there any log file I should share that would help satisfy the request to validate the fix? Or are you looking for it to be tested in an actual use-case scenario, rather than in the test suite? Also, click to expand the details below on issues I had even getting the dev installation to work on my Windows machine, which is why I fell back to good old Notes on dev install not working...I followed the setup instructions py -3.11 -m venv .venv
.\.venv\Scripts\activate
pip install -r requirements/dev.pipBut I got an error from So I ran So I just installed |
|
@blakeNaccarato thanks! Did you try to reproduce the error from the original issue #1573? We have CI that confirms the pull request works, but it's hard to demonstrate the problem first. @bparzella Maybe we could use your zip file from #1573 as the basis for a new test? |
|
I can verify on my Windows machine that A more sophisticated way to test this would be to check the resulting .diffdiff --git a/pypi/proj/coverage.xml b/xml_duplicate_fix/proj/coverage.xml
index 5827aa2..c7f43c6 100644
--- a/pypi/proj/coverage.xml
+++ b/xml_duplicate_fix/proj/coverage.xml
@@ -1,6 +1,6 @@
...
@@ -8,32 +8,34 @@
<packages>
<package name="namespace.package1" line-rate="1" branch-rate="0" complexity="0">
<classes>
- <class name="__main__.py" filename="namespace/package1/__main__.py" complexity="0" line-rate="1" branch-rate="0">
+ <class name="__init__.py" filename="namespace/package1/__init__.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
<lines>
...
</lines>
</class>
- <class name="sample.py" filename="namespace/package1/sample.py" complexity="0" line-rate="1" branch-rate="0">
+ <class name="__main__.py" filename="namespace/package1/__main__.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
<lines>
...
</lines>
</class>
- <class name="test.py" filename="namespace/package1/test.py" complexity="0" line-rate="1" branch-rate="0">
+ <class name="sample.py" filename="namespace/package1/sample.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
<lines>
...
</lines>
</class>
- </classes>
- </package>
- <package name="namespace.package1.subpackage" line-rate="1" branch-rate="0" complexity="0">
- <classes>
- <class name="test.py" filename="namespace/package1/subpackage/test.py" complexity="0" line-rate="1" branch-rate="0">
+ <class name="test.py" filename="namespace/package1/test.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
<lines>
<line number="1" hits="1"/>
@@ -42,19 +44,13 @@
</class>
</classes>
</package>
- <package name="namespace.package1" line-rate="1" branch-rate="0" complexity="0">
+ <package name="namespace.package1.subpackage" line-rate="1" branch-rate="0" complexity="0">
<classes>
- <class name="__init__.py" filename="namespace/package1/__init__.py" complexity="0" line-rate="1" branch-rate="0">
+ <class name="test.py" filename="namespace/package1/subpackage/test.py" complexity="0" line-rate="1" branch-rate="0">
<methods/>
<lines>
...
</lines>
</class>
</classes>
|
@nedbat That sounds like a good idea, I'll look into it. |
|
Running the test on windows using the master branch has the following results: |
|
This is now released as part of coverage 7.2.2. |
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `==7.2.1` -> `==7.2.2` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy</summary> ### [`v7.2.2`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-722--2023-03-16) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.2.1...7.2.2) - Fix: if a virtualenv was created inside a source directory, and a sourced package was installed inside the virtualenv, then all of the third-party packages inside the virtualenv would be measured. This was incorrect, but has now been fixed: only the specified packages will be measured, thanks to `Manuel Jacob <pull 1560_>`\_. - Fix: the `coverage lcov` command could create a .lcov file with incorrect LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`\_. - Fix: the `coverage xml` command on Windows could create a .xml file with duplicate `<package>` elements. This is now fixed, thanks to `Benjamin Parzella <pull 1574_>`*, closing `issue 1573`*. .. \_pull 1560:[https://github.com/nedbat/coveragepy/pull/1560](https://togithub.com/nedbat/coveragepy/pull/1560)0 .. \_issue 1573[https://github.com/nedbat/coveragepy/issues/1573](https://togithub.com/nedbat/coveragepy/issues/1573)73 .. \_pull 157[https://github.com/nedbat/coveragepy/pull/1574](https://togithub.com/nedbat/coveragepy/pull/1574)574 .. \_pull 15[https://github.com/nedbat/coveragepy/pull/1583](https://togithub.com/nedbat/coveragepy/pull/1583)1583 .. \_changes\_7-2-1: </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Enabled. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/allenporter/flux-local). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNS4xMC4yIiwidXBkYXRlZEluVmVyIjoiMzUuMTAuMiJ9--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `==7.2.1` -> `==7.2.2` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [mkdocs-material](https://togithub.com/squidfunk/mkdocs-material) | `==9.1.2` -> `==9.1.3` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | [pyright](https://togithub.com/RobertCraigie/pyright-python) | `==1.1.298` -> `==1.1.299` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | | wheel ([changelog](https://wheel.readthedocs.io/en/stable/news.html)) | `==0.38.4` -> `==0.40.0` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy</summary> ### [`v7.2.2`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-722--2023-03-16) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.2.1...7.2.2) - Fix: if a virtualenv was created inside a source directory, and a sourced package was installed inside the virtualenv, then all of the third-party packages inside the virtualenv would be measured. This was incorrect, but has now been fixed: only the specified packages will be measured, thanks to `Manuel Jacob <pull 1560_>`\_. - Fix: the `coverage lcov` command could create a .lcov file with incorrect LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`\_. - Fix: the `coverage xml` command on Windows could create a .xml file with duplicate `<package>` elements. This is now fixed, thanks to `Benjamin Parzella <pull 1574_>`*, closing `issue 1573`*. .. \_pull 1560:[https://github.com/nedbat/coveragepy/pull/1560](https://togithub.com/nedbat/coveragepy/pull/1560)0 .. \_issue 1573[https://github.com/nedbat/coveragepy/issues/1573](https://togithub.com/nedbat/coveragepy/issues/1573)73 .. \_pull 157[https://github.com/nedbat/coveragepy/pull/1574](https://togithub.com/nedbat/coveragepy/pull/1574)574 .. \_pull 15[https://github.com/nedbat/coveragepy/pull/1583](https://togithub.com/nedbat/coveragepy/pull/1583)1583 .. \_changes\_7-2-1: </details> <details> <summary>squidfunk/mkdocs-material</summary> ### [`v9.1.3`](https://togithub.com/squidfunk/mkdocs-material/releases/tag/9.1.3): mkdocs-material-9.1.3 [Compare Source](https://togithub.com/squidfunk/mkdocs-material/compare/9.1.2...9.1.3) - Added Kurdish (Soranî) translations - Updated Norwegian (Bokmål), Portuguese and Romanian translations - Improved compatibility with `mkdocs-jupyter` plugin - Fixed [#​5198](https://togithub.com/squidfunk/mkdocs-material/issues/5198): Built-in search plugin not filtering `script` and `style` tags - Fixed [#​5176](https://togithub.com/squidfunk/mkdocs-material/issues/5176): Back-to-top + instant loading not working (9.1.1 regression) </details> <details> <summary>RobertCraigie/pyright-python</summary> ### [`v1.1.299`](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.298...v1.1.299) [Compare Source](https://togithub.com/RobertCraigie/pyright-python/compare/v1.1.298...v1.1.299) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/RobertCraigie/prisma-client-py). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNjAuMCIsInVwZGF0ZWRJblZlciI6IjM1LjEwLjIifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
[](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | [coverage](https://togithub.com/nedbat/coveragepy) | `==7.1.0` -> `==7.2.2` | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | [](https://docs.renovatebot.com/merge-confidence/) | --- ### Release Notes <details> <summary>nedbat/coveragepy</summary> ### [`v7.2.2`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-722--2023-03-16) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.2.1...7.2.2) - Fix: if a virtualenv was created inside a source directory, and a sourced package was installed inside the virtualenv, then all of the third-party packages inside the virtualenv would be measured. This was incorrect, but has now been fixed: only the specified packages will be measured, thanks to `Manuel Jacob <pull 1560_>`\_. - Fix: the `coverage lcov` command could create a .lcov file with incorrect LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`\_. - Fix: the `coverage xml` command on Windows could create a .xml file with duplicate `<package>` elements. This is now fixed, thanks to `Benjamin Parzella <pull 1574_>`*, closing `issue 1573`*. .. \_pull 1560:[https://github.com/nedbat/coveragepy/pull/1560](https://togithub.com/nedbat/coveragepy/pull/1560)0 .. \_issue 1573[https://github.com/nedbat/coveragepy/issues/1573](https://togithub.com/nedbat/coveragepy/issues/1573)73 .. \_pull 157[https://github.com/nedbat/coveragepy/pull/1574](https://togithub.com/nedbat/coveragepy/pull/1574)574 .. \_pull 15[https://github.com/nedbat/coveragepy/pull/1583](https://togithub.com/nedbat/coveragepy/pull/1583)1583 .. \_changes\_7-2-1: ### [`v7.2.1`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-721--2023-02-26) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.2.0...7.2.1) - Fix: the PyPI page had broken links to documentation pages, but no longer does, closing `issue 1566`\_. - Fix: public members of the coverage module are now properly indicated so that mypy will find them, fixing `issue 1564`\_. .. \_issue 1564:[https://github.com/nedbat/coveragepy/issues/1564](https://togithub.com/nedbat/coveragepy/issues/1564)4 .. \_issue 1566[https://github.com/nedbat/coveragepy/issues/1566](https://togithub.com/nedbat/coveragepy/issues/1566)66 .. \_changes\_7-2-0: ### [`v7.2.0`](https://togithub.com/nedbat/coveragepy/blob/HEAD/CHANGES.rst#Version-720--2023-02-22) [Compare Source](https://togithub.com/nedbat/coveragepy/compare/7.1.0...7.2.0) - Added a new setting `[report] exclude_also` to let you add more exclusions without overwriting the defaults. Thanks, `Alpha Chen <pull 1557_>`*, closing `issue 1391`*. - Added a :meth:`.CoverageData.purge_files` method to remove recorded data for a particular file. Contributed by `Stephan Deibel <pull 1547_>`\_. - Fix: when reporting commands fail, they will no longer congratulate themselves with messages like "Wrote XML report to file.xml" before spewing a traceback about their failure. - Fix: arguments in the public API that name file paths now accept pathlib.Path objects. This includes the `data_file` and `config_file` arguments to the Coverage constructor and the `basename` argument to CoverageData. Closes `issue 1552`\_. - Fix: In some embedded environments, an IndexError could occur on stop() when the originating thread exits before completion. This is now fixed, thanks to `Russell Keith-Magee <pull 1543_>`*, closing `issue 1542`*. - Added a `py.typed` file to announce our type-hintedness. Thanks, `KotlinIsland <pull 1550_>`\_. .. \_issue 1391:[https://github.com/nedbat/coveragepy/issues/1391](https://togithub.com/nedbat/coveragepy/issues/1391)1 .. \_issue 1542[https://github.com/nedbat/coveragepy/issues/1542](https://togithub.com/nedbat/coveragepy/issues/1542)42 .. \_pull 154[https://github.com/nedbat/coveragepy/pull/1543](https://togithub.com/nedbat/coveragepy/pull/1543)543 .. \_pull 15[https://github.com/nedbat/coveragepy/pull/1547](https://togithub.com/nedbat/coveragepy/pull/1547)1547 .. \_pull 1[https://github.com/nedbat/coveragepy/pull/1550](https://togithub.com/nedbat/coveragepy/pull/1550)/1550 .. \_issue [https://github.com/nedbat/coveragepy/issues/1552](https://togithub.com/nedbat/coveragepy/issues/1552)s/1552 .. \_pull[https://github.com/nedbat/coveragepy/pull/1557](https://togithub.com/nedbat/coveragepy/pull/1557)ll/1557 .. \_changes\_7-1-0: </details> --- ### Configuration 📅 **Schedule**: Branch creation - "every weekend" in timezone Etc/UTC, Automerge - "after 1 am and before 7 am" in timezone Etc/UTC. 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://app.renovatebot.com/dashboard#github/canonical/charmcraft). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4xNTQuNyIsInVwZGF0ZWRJblZlciI6IjM1LjExLjAifQ==--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Version 7.2.5 — 2023-04-30 -------------------------- - Fix: ``html_report()`` could fail with an AttributeError on ``isatty`` if run in an unusual environment where sys.stdout had been replaced. This is now fixed. Version 7.2.4 — 2023-04-28 -------------------------- PyCon 2023 sprint fixes! - Fix: with ``relative_files = true``, specifying a specific file to include or omit wouldn't work correctly (`issue 1604`_). This is now fixed, with testing help by `Marc Gibbons <pull 1608_>`_. - Fix: the XML report would have an incorrect ``<source>`` element when using relative files and the source option ended with a slash (`issue 1541`_). This is now fixed, thanks to `Kevin Brown-Silva <pull 1608_>`_. - When the HTML report location is printed to the terminal, it's now a terminal-compatible URL, so that you can click the location to open the HTML file in your browser. Finishes `issue 1523`_ thanks to `Ricardo Newbery <pull 1613_>`_. - Docs: a new :ref:`Migrating page <migrating>` with details about how to migrate between major versions of coverage.py. It currently covers the wildcard changes in 7.x. Thanks, `Brian Grohe <pull 1610_>`_. .. _issue 1523: coveragepy/coveragepy#1523 .. _issue 1541: coveragepy/coveragepy#1541 .. _issue 1604: coveragepy/coveragepy#1604 .. _pull 1608: coveragepy/coveragepy#1608 .. _pull 1609: coveragepy/coveragepy#1609 .. _pull 1610: coveragepy/coveragepy#1610 .. _pull 1613: coveragepy/coveragepy#1613 Version 7.2.3 — 2023-04-06 -------------------------- - Fix: the :ref:`config_run_sigterm` setting was meant to capture data if a process was terminated with a SIGTERM signal, but it didn't always. This was fixed thanks to `Lewis Gaul <pull 1600_>`_, closing `issue 1599`_. - Performance: HTML reports with context information are now much more compact. File sizes are typically as small as one-third the previous size, but can be dramatically smaller. This closes `issue 1584`_ thanks to `Oleh Krehel <pull 1587_>`_. - Development dependencies no longer use hashed pins, closing `issue 1592`_. .. _issue 1584: coveragepy/coveragepy#1584 .. _pull 1587: coveragepy/coveragepy#1587 .. _issue 1592: coveragepy/coveragepy#1592 .. _issue 1599: coveragepy/coveragepy#1599 .. _pull 1600: coveragepy/coveragepy#1600 Version 7.2.2 — 2023-03-16 -------------------------- - Fix: if a virtualenv was created inside a source directory, and a sourced package was installed inside the virtualenv, then all of the third-party packages inside the virtualenv would be measured. This was incorrect, but has now been fixed: only the specified packages will be measured, thanks to `Manuel Jacob <pull 1560_>`_. - Fix: the ``coverage lcov`` command could create a .lcov file with incorrect LF (lines found) and LH (lines hit) totals. This is now fixed, thanks to `Ian Moore <pull 1583_>`_. - Fix: the ``coverage xml`` command on Windows could create a .xml file with duplicate ``<package>`` elements. This is now fixed, thanks to `Benjamin Parzella <pull 1574_>`_, closing `issue 1573`_. .. _pull 1560: coveragepy/coveragepy#1560 .. _issue 1573: coveragepy/coveragepy#1573 .. _pull 1574: coveragepy/coveragepy#1574 .. _pull 1583: coveragepy/coveragepy#1583 Version 7.2.1 — 2023-02-26 -------------------------- - Fix: the PyPI page had broken links to documentation pages, but no longer does, closing `issue 1566`_. - Fix: public members of the coverage module are now properly indicated so that mypy will find them, fixing `issue 1564`_. .. _issue 1564: coveragepy/coveragepy#1564 .. _issue 1566: coveragepy/coveragepy#1566 Version 7.2.0 — 2023-02-22 -------------------------- - Added a new setting ``[report] exclude_also`` to let you add more exclusions without overwriting the defaults. Thanks, `Alpha Chen <pull 1557_>`_, closing `issue 1391`_. - Added a :meth:`.CoverageData.purge_files` method to remove recorded data for a particular file. Contributed by `Stephan Deibel <pull 1547_>`_. - Fix: when reporting commands fail, they will no longer congratulate themselves with messages like "Wrote XML report to file.xml" before spewing a traceback about their failure. - Fix: arguments in the public API that name file paths now accept pathlib.Path objects. This includes the ``data_file`` and ``config_file`` arguments to the Coverage constructor and the ``basename`` argument to CoverageData. Closes `issue 1552`_. - Fix: In some embedded environments, an IndexError could occur on stop() when the originating thread exits before completion. This is now fixed, thanks to `Russell Keith-Magee <pull 1543_>`_, closing `issue 1542`_. - Added a ``py.typed`` file to announce our type-hintedness. Thanks, `KotlinIsland <pull 1550_>`_. .. _issue 1391: coveragepy/coveragepy#1391 .. _issue 1542: coveragepy/coveragepy#1542 .. _pull 1543: coveragepy/coveragepy#1543 .. _pull 1547: coveragepy/coveragepy#1547 .. _pull 1550: coveragepy/coveragepy#1550 .. _issue 1552: coveragepy/coveragepy#1552 .. _pull 1557: coveragepy/coveragepy#1557 Version 7.1.0 — 2023-01-24 -------------------------- - Added: the debug output file can now be specified with ``[run] debug_file`` in the configuration file. Closes `issue 1319`_. - Performance: fixed a slowdown with dynamic contexts that's been around since 6.4.3. The fix closes `issue 1538`_. Thankfully this doesn't break the `Cython change`_ that fixed `issue 972`_. Thanks to Mathieu Kniewallner for the deep investigative work and comprehensive issue report. - Typing: all product and test code has type annotations. .. _Cython change: coveragepy/coveragepy#1347 .. _issue 972: coveragepy/coveragepy#972 .. _issue 1319: coveragepy/coveragepy#1319 .. _issue 1538: coveragepy/coveragepy#1538 Version 7.0.5 — 2023-01-10 -------------------------- - Fix: On Python 3.7, a file with type annotations but no ``from __future__ import annotations`` would be missing statements in the coverage report. This is now fixed, closing `issue 1524`_. .. _issue 1524: coveragepy/coveragepy#1524 Version 7.0.4 — 2023-01-07 -------------------------- - Performance: an internal cache of file names was accidentally disabled, resulting in sometimes drastic reductions in performance. This is now fixed, closing `issue 1527`_. Thanks to Ivan Ciuvalschii for the reproducible test case. .. _issue 1527: coveragepy/coveragepy#1527 Version 7.0.3 — 2023-01-03 -------------------------- - Fix: when using pytest-cov or pytest-xdist, or perhaps both, the combining step could fail with ``assert row is not None`` using 7.0.2. This was due to a race condition that has always been possible and is still possible. In 7.0.1 and before, the error was silently swallowed by the combining code. Now it will produce a message "Couldn't combine data file" and ignore the data file as it used to do before 7.0.2. Closes `issue 1522`_. .. _issue 1522: coveragepy/coveragepy#1522 Version 7.0.2 — 2023-01-02 -------------------------- - Fix: when using the ``[run] relative_files = True`` setting, a relative ``[paths]`` pattern was still being made absolute. This is now fixed, closing `issue 1519`_. - Fix: if Python doesn't provide tomllib, then TOML configuration files can only be read if coverage.py is installed with the ``[toml]`` extra. Coverage.py will raise an error if TOML support is not installed when it sees your settings are in a .toml file. But it didn't understand that ``[tools.coverage]`` was a valid section header, so the error wasn't reported if you used that header, and settings were silently ignored. This is now fixed, closing `issue 1516`_. - Fix: adjusted how decorators are traced on PyPy 7.3.10, fixing `issue 1515`_. - Fix: the ``coverage lcov`` report did not properly implement the ``--fail-under=MIN`` option. This has been fixed. - Refactor: added many type annotations, including a number of refactorings. This should not affect outward behavior, but they were a bit invasive in some places, so keep your eyes peeled for oddities. - Refactor: removed the vestigial and long untested support for Jython and IronPython. .. _issue 1515: coveragepy/coveragepy#1515 .. _issue 1516: coveragepy/coveragepy#1516 .. _issue 1519: coveragepy/coveragepy#1519 Version 7.0.1 — 2022-12-23 -------------------------- - When checking if a file mapping resolved to a file that exists, we weren't considering files in .whl files. This is now fixed, closing `issue 1511`_. - File pattern rules were too strict, forbidding plus signs and curly braces in directory and file names. This is now fixed, closing `issue 1513`_. - Unusual Unicode or control characters in source files could prevent reporting. This is now fixed, closing `issue 1512`_. - The PyPy wheel now installs on PyPy 3.7, 3.8, and 3.9, closing `issue 1510`_. .. _issue 1510: coveragepy/coveragepy#1510 .. _issue 1511: coveragepy/coveragepy#1511 .. _issue 1512: coveragepy/coveragepy#1512 .. _issue 1513: coveragepy/coveragepy#1513 Version 7.0.0 — 2022-12-18 -------------------------- Nothing new beyond 7.0.0b1. Version 7.0.0b1 — 2022-12-03 ---------------------------- A number of changes have been made to file path handling, including pattern matching and path remapping with the ``[paths]`` setting (see :ref:`config_paths`). These changes might affect you, and require you to update your settings. (This release includes the changes from `6.6.0b1 <changes_6-6-0b1_>`_, since 6.6.0 was never released.) - Changes to file pattern matching, which might require updating your configuration: - Previously, ``*`` would incorrectly match directory separators, making precise matching difficult. This is now fixed, closing `issue 1407`_. - Now ``**`` matches any number of nested directories, including none. - Improvements to combining data files when using the :ref:`config_run_relative_files` setting, which might require updating your configuration: - During ``coverage combine``, relative file paths are implicitly combined without needing a ``[paths]`` configuration setting. This also fixed `issue 991`_. - A ``[paths]`` setting like ``*/foo`` will now match ``foo/bar.py`` so that relative file paths can be combined more easily. - The :ref:`config_run_relative_files` setting is properly interpreted in more places, fixing `issue 1280`_. - When remapping file paths with ``[paths]``, a path will be remapped only if the resulting path exists. The documentation has long said the prefix had to exist, but it was never enforced. This fixes `issue 608`_, improves `issue 649`_, and closes `issue 757`_. - Reporting operations now implicitly use the ``[paths]`` setting to remap file paths within a single data file. Combining multiple files still requires the ``coverage combine`` step, but this simplifies some single-file situations. Closes `issue 1212`_ and `issue 713`_. - The ``coverage report`` command now has a ``--format=`` option. The original style is now ``--format=text``, and is the default. - Using ``--format=markdown`` will write the table in Markdown format, thanks to `Steve Oswald <pull 1479_>`_, closing `issue 1418`_. - Using ``--format=total`` will write a single total number to the output. This can be useful for making badges or writing status updates. - Combining data files with ``coverage combine`` now hashes the data files to skip files that add no new information. This can reduce the time needed. Many details affect the speed-up, but for coverage.py's own test suite, combining is about 40% faster. Closes `issue 1483`_. - When searching for completely un-executed files, coverage.py uses the presence of ``__init__.py`` files to determine which directories have source that could have been imported. However, `implicit namespace packages`_ don't require ``__init__.py``. A new setting ``[report] include_namespace_packages`` tells coverage.py to consider these directories during reporting. Thanks to `Felix Horvat <pull 1387_>`_ for the contribution. Closes `issue 1383`_ and `issue 1024`_. - Fixed environment variable expansion in pyproject.toml files. It was overly broad, causing errors outside of coverage.py settings, as described in `issue 1481`_ and `issue 1345`_. This is now fixed, but in rare cases will require changing your pyproject.toml to quote non-string values that use environment substitution. - An empty file has a coverage total of 100%, but used to fail with ``--fail-under``. This has been fixed, closing `issue 1470`_. - The text report table no longer writes out two separator lines if there are no files listed in the table. One is plenty. - Fixed a mis-measurement of a strange use of wildcard alternatives in match/case statements, closing `issue 1421`_. - Fixed internal logic that prevented coverage.py from running on implementations other than CPython or PyPy (`issue 1474`_). - The deprecated ``[run] note`` setting has been completely removed. .. _implicit namespace packages: https://peps.python.org/pep-0420/ .. _issue 608: coveragepy/coveragepy#608 .. _issue 649: coveragepy/coveragepy#649 .. _issue 713: coveragepy/coveragepy#713 .. _issue 757: coveragepy/coveragepy#757 .. _issue 991: coveragepy/coveragepy#991 .. _issue 1024: coveragepy/coveragepy#1024 .. _issue 1212: coveragepy/coveragepy#1212 .. _issue 1280: coveragepy/coveragepy#1280 .. _issue 1345: coveragepy/coveragepy#1345 .. _issue 1383: coveragepy/coveragepy#1383 .. _issue 1407: coveragepy/coveragepy#1407 .. _issue 1418: coveragepy/coveragepy#1418 .. _issue 1421: coveragepy/coveragepy#1421 .. _issue 1470: coveragepy/coveragepy#1470 .. _issue 1474: coveragepy/coveragepy#1474 .. _issue 1481: coveragepy/coveragepy#1481 .. _issue 1483: coveragepy/coveragepy#1483 .. _pull 1387: coveragepy/coveragepy#1387 .. _pull 1479: coveragepy/coveragepy#1479 Version 6.6.0b1 — 2022-10-31 ---------------------------- (Note: 6.6.0 final was never released. These changes are part of `7.0.0b1 <changes_7-0-0b1_>`_.) - Changes to file pattern matching, which might require updating your configuration: - Previously, ``*`` would incorrectly match directory separators, making precise matching difficult. This is now fixed, closing `issue 1407`_. - Now ``**`` matches any number of nested directories, including none. - Improvements to combining data files when using the :ref:`config_run_relative_files` setting: - During ``coverage combine``, relative file paths are implicitly combined without needing a ``[paths]`` configuration setting. This also fixed `issue 991`_. - A ``[paths]`` setting like ``*/foo`` will now match ``foo/bar.py`` so that relative file paths can be combined more easily. - The setting is properly interpreted in more places, fixing `issue 1280`_. - Fixed environment variable expansion in pyproject.toml files. It was overly broad, causing errors outside of coverage.py settings, as described in `issue 1481`_ and `issue 1345`_. This is now fixed, but in rare cases will require changing your pyproject.toml to quote non-string values that use environment substitution. - Fixed internal logic that prevented coverage.py from running on implementations other than CPython or PyPy (`issue 1474`_). .. _issue 991: coveragepy/coveragepy#991 .. _issue 1280: coveragepy/coveragepy#1280 .. _issue 1345: coveragepy/coveragepy#1345 .. _issue 1407: coveragepy/coveragepy#1407 .. _issue 1474: coveragepy/coveragepy#1474 .. _issue 1481: coveragepy/coveragepy#1481
This will fix the problem of duplicate package elements with the same name in the xml report generated on windows.
Closes #1573