coverage 7.16.0__tar.gz → 7.16.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/codeql-analysis.yml +3 -3
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/coverage.yml +22 -4
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/kit.yml +5 -5
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/python-nightly.yml +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/quality.yml +8 -8
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/testsuite.yml +9 -4
- {coverage-7.16.0 → coverage-7.16.2}/.pre-commit-config.yaml +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/.readthedocs.yaml +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/CHANGES.rst +39 -0
- {coverage-7.16.0 → coverage-7.16.2}/MANIFEST.in +2 -2
- {coverage-7.16.0 → coverage-7.16.2}/Makefile +16 -16
- {coverage-7.16.0 → coverage-7.16.2}/PKG-INFO +8 -12
- {coverage-7.16.0 → coverage-7.16.2}/README.rst +1 -5
- {coverage-7.16.0 → coverage-7.16.2}/coverage/bytecode.py +6 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/context.py +7 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/tracer.c +13 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/debug.py +4 -7
- {coverage-7.16.0 → coverage-7.16.2}/coverage/files.py +4 -4
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/coverage_html.js +11 -8
- {coverage-7.16.0 → coverage-7.16.2}/coverage/parser.py +30 -8
- {coverage-7.16.0 → coverage-7.16.2}/coverage/pytracer.py +16 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/report_core.py +1 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/sqldata.py +7 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/types.py +11 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/version.py +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/PKG-INFO +8 -12
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/SOURCES.txt +9 -9
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_combine.rst +25 -3
- {coverage-7.16.0 → coverage-7.16.2}/doc/conf.py +3 -3
- {coverage-7.16.0 → coverage-7.16.2}/doc/contributing.rst +25 -8
- {coverage-7.16.0 → coverage-7.16.2}/doc/index.rst +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/doc/requirements.in +2 -2
- coverage-7.16.2/doc/requirements.txt +883 -0
- {coverage-7.16.0 → coverage-7.16.2}/howto.txt +4 -9
- {coverage-7.16.0 → coverage-7.16.2}/pyproject.toml +7 -0
- {coverage-7.16.0 → coverage-7.16.2}/requirements/dev.in +3 -2
- coverage-7.16.0/requirements/dev.pip → coverage-7.16.2/requirements/dev.txt +495 -375
- {coverage-7.16.0 → coverage-7.16.2}/requirements/kit.in +2 -2
- coverage-7.16.2/requirements/kit.txt +542 -0
- {coverage-7.16.0 → coverage-7.16.2}/requirements/light-threads.in +1 -1
- coverage-7.16.0/requirements/light-threads.pip → coverage-7.16.2/requirements/light-threads.txt +42 -42
- {coverage-7.16.0 → coverage-7.16.2}/requirements/mypy.in +1 -1
- coverage-7.16.2/requirements/mypy.txt +612 -0
- {coverage-7.16.0 → coverage-7.16.2}/requirements/pip.in +2 -2
- coverage-7.16.0/requirements/pip.pip → coverage-7.16.2/requirements/pip.txt +12 -12
- {coverage-7.16.0 → coverage-7.16.2}/requirements/pytest.in +5 -3
- coverage-7.16.2/requirements/pytest.txt +340 -0
- {coverage-7.16.0 → coverage-7.16.2}/requirements/tox.in +2 -2
- coverage-7.16.0/requirements/tox.pip → coverage-7.16.2/requirements/tox.txt +18 -18
- coverage-7.16.2/tests/js/index.html +25 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/js/tests.js +36 -19
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_arcs.py +41 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_bytecode.py +2 -2
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_context.py +50 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_coverage.py +31 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_data.py +18 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_debug.py +6 -1
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_parser.py +63 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/testenv.py +1 -1
- {coverage-7.16.0 → coverage-7.16.2}/tox.ini +7 -7
- coverage-7.16.0/doc/requirements.pip +0 -828
- coverage-7.16.0/requirements/kit.pip +0 -542
- coverage-7.16.0/requirements/mypy.pip +0 -436
- coverage-7.16.0/requirements/pytest.pip +0 -171
- coverage-7.16.0/tests/js/index.html +0 -43
- {coverage-7.16.0 → coverage-7.16.2}/.editorconfig +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.git-blame-ignore-revs +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/CODE_OF_CONDUCT.md +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/FUNDING.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/SECURITY.md +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/dependabot.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/dependency-review.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/workflows/publish.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.github/zizmor.yml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.gitignore +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/.ignore +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/CITATION.cff +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/CONTRIBUTORS.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/LICENSE.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/NOTICE.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/__main__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/a1_coverage.pth +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/ci/README.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/ci/comment_on_fixes.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/ci/session.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/ci/trigger_action.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/ci/update_rtfd.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/__main__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/annotate.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/cmdline.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/collector.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/config.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/control.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/core.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/datastack.c +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/datastack.h +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/filedisp.c +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/filedisp.h +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/module.c +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/stats.h +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/tracer.h +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/ctracer/util.h +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/data.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/disposition.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/env.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/exceptions.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/execfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/html.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/favicon_32.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/keybd_closed.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/pyfile.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/style.css +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/htmlfiles/style.scss +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/inorout.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/jsonreport.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/lcovreport.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/misc.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/multiproc.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/numbits.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/patch.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/phystokens.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/plugin.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/plugin_support.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/pth_file.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/py.typed +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/python.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/regions.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/report.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/results.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/sqlitedb.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/sysmon.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/templite.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/tomlconfig.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/tracer.pyi +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage/xmlreport.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/dependency_links.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/entry_points.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/not-zip-safe +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/requires.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/coverage.egg-info/top_level.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/_static/coverage.css +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api_coverage.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api_coveragedata.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api_exceptions.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api_module.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/api_plugin.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/branch.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/changes.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/cog_helpers.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_annotate.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_debug.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_erase.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_html.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_json.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_lcov.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_report.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_reporting.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_run.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/cmd_xml.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/commands/index.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/config.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/contexts.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/dbschema.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/dict.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/excluding.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/faq.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/howitworks.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/install.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/media/sleepy-snake-600.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/media/sleepy-snake-circle-150.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/messages.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/migrating.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/other.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/plugins.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/python-coverage.1.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/sleepy.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/source.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/subprocess.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/trouble.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/doc/whatsnew5x.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/igor.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/README.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/branches.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/compare_times.sh +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/coverage-04.dtd +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/extract_code.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/goals.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/hack_pyc.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/notes/arcs-to-branches.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/notes/bug1303.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/parse_all.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/parser.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/pick.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/platform_info.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/run_sysmon.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/run_trace.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/select_contexts.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/show_platform.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/show_pyc.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/treetopy.sh +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/warn_executed.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/lab/warn_executed.toml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/metacov.ini +0 -0
- /coverage-7.16.0/requirements/pins.pip → /coverage-7.16.2/requirements/pins.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/setup.cfg +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/setup.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/conftest.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/coveragetest.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/covmodzip1.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/README.rst +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/annotate/white/white.py,cover +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/Makefile +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/a_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/a/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/b_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/b_branch/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/bom_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/bom/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/multiline/multiline_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m1_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m2_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/m3_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_1/main_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/m2_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/m3_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_2/main_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/m3_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_3/main_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/m1_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/m3_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_4/main_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/m1_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/omit_5/main_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/here_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/other/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/partial/partial_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/a_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/myextra.css +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/styled/style.css +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/class_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/function_index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/index.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/html/unicode/unicode_py.html +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/testing/xml/output.xml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/goldtest.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/helpers.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/hypo.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/mixins.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/afile.odd.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/afile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/bfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/aa/zfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/checkspec.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/covmod1.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/__main__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1a.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1b.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/p1c.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/runmod2.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/__main__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/p2a.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/pkg2/p2b.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/a_plugin.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/plugins/another.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/process_test/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/process_test/try_execfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/runmod1.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/modules/usepkgs.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/othera.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/otherb.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/osa.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/moremodules/othermods/sub/osb.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/osinfo.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/plugin1.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/plugin2.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/plugin_config.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/qunit/jquery.tmpl.min.js +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/select_plugin.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/strategies.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/stress_phystoken.tok +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/stress_phystoken_dos.tok +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_annotate.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_api.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_cmdline.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_collector.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_concurrency.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_config.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_core.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_execfile.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_filereporter.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_files.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_goldtest.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_html.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_json.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_lcov.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_misc.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_mixins.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_numbits.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_oddball.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_phystokens.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_plugins.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_process.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_python.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_regions.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_report.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_report_common.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_report_core.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_results.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_setup.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_sqlitedb.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_sysmon.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_templite.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_testing.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_venv.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_version.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/test_xml.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/zipsrc/zip1/__init__.py +0 -0
- {coverage-7.16.0 → coverage-7.16.2}/tests/zipsrc/zip1/zip1.py +0 -0
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
|
|
56
56
|
# Initializes the CodeQL tools for scanning.
|
|
57
57
|
- name: Initialize CodeQL
|
|
58
|
-
uses: github/codeql-action/init@
|
|
58
|
+
uses: github/codeql-action/init@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
59
59
|
with:
|
|
60
60
|
languages: ${{ matrix.language }}
|
|
61
61
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -66,7 +66,7 @@ jobs:
|
|
|
66
66
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
67
67
|
# If this step fails, then you should remove it and run the build manually (see below)
|
|
68
68
|
- name: Autobuild
|
|
69
|
-
uses: github/codeql-action/autobuild@
|
|
69
|
+
uses: github/codeql-action/autobuild@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
70
70
|
|
|
71
71
|
# ℹ️ Command-line programs to run using the OS shell.
|
|
72
72
|
# 📚 https://git.io/JvXDl
|
|
@@ -80,4 +80,4 @@ jobs:
|
|
|
80
80
|
# make release
|
|
81
81
|
|
|
82
82
|
- name: Perform CodeQL Analysis
|
|
83
|
-
uses: github/codeql-action/analyze@
|
|
83
|
+
uses: github/codeql-action/analyze@b96794f015dfd88f77b49b1c93e0fa7110f94c63 # v4.38.0
|
|
@@ -57,7 +57,7 @@ jobs:
|
|
|
57
57
|
- ".github/workflows/coverage.yml"
|
|
58
58
|
- "tox.ini"
|
|
59
59
|
- "metacov.ini"
|
|
60
|
-
- "requirements/*.
|
|
60
|
+
- "requirements/*.txt"
|
|
61
61
|
- "tests/gold/**"
|
|
62
62
|
|
|
63
63
|
coverage:
|
|
@@ -133,7 +133,7 @@ jobs:
|
|
|
133
133
|
# 3.10 on Windows. Commenting out the cache here fixed it. Someday
|
|
134
134
|
# try using the cache again.
|
|
135
135
|
#cache: pip
|
|
136
|
-
#cache-dependency-path: 'requirements/*.
|
|
136
|
+
#cache-dependency-path: 'requirements/*.txt'
|
|
137
137
|
|
|
138
138
|
- name: "Show environment"
|
|
139
139
|
run: |
|
|
@@ -146,7 +146,7 @@ jobs:
|
|
|
146
146
|
- name: "Install dependencies"
|
|
147
147
|
run: |
|
|
148
148
|
set -xe
|
|
149
|
-
python -m pip install -r requirements/tox.
|
|
149
|
+
python -m pip install -r requirements/tox.txt
|
|
150
150
|
|
|
151
151
|
- name: "Run tox coverage for ${{ matrix.python-version }}"
|
|
152
152
|
env:
|
|
@@ -184,6 +184,7 @@ jobs:
|
|
|
184
184
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
185
185
|
with:
|
|
186
186
|
persist-credentials: false
|
|
187
|
+
fetch-depth: 200
|
|
187
188
|
|
|
188
189
|
- name: "Set up Python"
|
|
189
190
|
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
|
|
@@ -193,7 +194,7 @@ jobs:
|
|
|
193
194
|
# 3.10 on Windows. Commenting out the cache here fixed it. Someday
|
|
194
195
|
# try using the cache again.
|
|
195
196
|
#cache: pip
|
|
196
|
-
#cache-dependency-path: 'requirements/*.
|
|
197
|
+
#cache-dependency-path: 'requirements/*.txt'
|
|
197
198
|
|
|
198
199
|
- name: "Show environment"
|
|
199
200
|
run: |
|
|
@@ -206,6 +207,7 @@ jobs:
|
|
|
206
207
|
run: |
|
|
207
208
|
set -xe
|
|
208
209
|
python -m pip install -e .
|
|
210
|
+
python -m pip install -r requirements/pytest.txt
|
|
209
211
|
python igor.py zip_mods
|
|
210
212
|
|
|
211
213
|
- name: "Download coverage data"
|
|
@@ -266,6 +268,22 @@ jobs:
|
|
|
266
268
|
exit 1
|
|
267
269
|
fi
|
|
268
270
|
|
|
271
|
+
- name: "Check coverage on changed lines"
|
|
272
|
+
# Changed code must be fully covered, unless the PR is labeled with "missing-coverage-ok".
|
|
273
|
+
if: github.event_name == 'pull_request'
|
|
274
|
+
env:
|
|
275
|
+
BASE_REF: ${{ github.event.pull_request.base.ref }}
|
|
276
|
+
FAIL_UNDER: ${{ contains(github.event.pull_request.labels.*.name, 'missing-coverage-ok') && '0' || '100' }}
|
|
277
|
+
run: |
|
|
278
|
+
git fetch origin "${BASE_REF}"
|
|
279
|
+
diff-cover coverage.xml \
|
|
280
|
+
--compare-branch "origin/${BASE_REF}" \
|
|
281
|
+
--fail-under="${FAIL_UNDER}" \
|
|
282
|
+
--format markdown:report.md \
|
|
283
|
+
|| status=$?
|
|
284
|
+
cat report.md >> "$GITHUB_STEP_SUMMARY"
|
|
285
|
+
exit "${status:-0}"
|
|
286
|
+
|
|
269
287
|
publish:
|
|
270
288
|
name: "Publish coverage report"
|
|
271
289
|
needs: combine
|
|
@@ -192,7 +192,7 @@ jobs:
|
|
|
192
192
|
with:
|
|
193
193
|
python-version: "${{ matrix.cipy }}"
|
|
194
194
|
cache: pip
|
|
195
|
-
cache-dependency-path: 'requirements/*.
|
|
195
|
+
cache-dependency-path: 'requirements/*.txt'
|
|
196
196
|
|
|
197
197
|
# Rust toolchain is not currently installed on windows arm64 images.
|
|
198
198
|
# We need it for nh3, needed by readme-renderer, needed by twine.
|
|
@@ -208,11 +208,11 @@ jobs:
|
|
|
208
208
|
|
|
209
209
|
- name: "Install tools"
|
|
210
210
|
run: |
|
|
211
|
-
python -m pip install -r requirements/kit.
|
|
211
|
+
python -m pip install -r requirements/kit.txt
|
|
212
212
|
|
|
213
213
|
- name: "Set up QEMU"
|
|
214
214
|
if: ${{ matrix.arch == 'riscv64' }}
|
|
215
|
-
uses: docker/setup-qemu-action@
|
|
215
|
+
uses: docker/setup-qemu-action@1f40c72289eff860ee54a304f1438e3cff362e0a # v4.3.0
|
|
216
216
|
|
|
217
217
|
- name: "Show environment"
|
|
218
218
|
run: |
|
|
@@ -257,11 +257,11 @@ jobs:
|
|
|
257
257
|
with:
|
|
258
258
|
python-version: "3.11" # PYVERSIONS: the kit-building version
|
|
259
259
|
cache: pip
|
|
260
|
-
cache-dependency-path: 'requirements/*.
|
|
260
|
+
cache-dependency-path: 'requirements/*.txt'
|
|
261
261
|
|
|
262
262
|
- name: "Install tools"
|
|
263
263
|
run: |
|
|
264
|
-
python -m pip install -r requirements/kit.
|
|
264
|
+
python -m pip install -r requirements/kit.txt
|
|
265
265
|
|
|
266
266
|
- name: "Build non-binary artifacts"
|
|
267
267
|
env:
|
|
@@ -58,7 +58,7 @@ jobs:
|
|
|
58
58
|
workflow:
|
|
59
59
|
- ".github/workflows/quality.yml"
|
|
60
60
|
- "tox.ini"
|
|
61
|
-
- "requirements/*.
|
|
61
|
+
- "requirements/*.txt"
|
|
62
62
|
|
|
63
63
|
lint:
|
|
64
64
|
name: "Pylint etc"
|
|
@@ -84,11 +84,11 @@ jobs:
|
|
|
84
84
|
with:
|
|
85
85
|
python-version: "3.10" # Minimum of PYVERSIONS
|
|
86
86
|
cache: pip
|
|
87
|
-
cache-dependency-path: 'requirements/*.
|
|
87
|
+
cache-dependency-path: 'requirements/*.txt'
|
|
88
88
|
|
|
89
89
|
- name: "Install dependencies"
|
|
90
90
|
run: |
|
|
91
|
-
python -m pip install -r requirements/tox.
|
|
91
|
+
python -m pip install -r requirements/tox.txt
|
|
92
92
|
|
|
93
93
|
- name: "Tox lint"
|
|
94
94
|
run: |
|
|
@@ -114,11 +114,11 @@ jobs:
|
|
|
114
114
|
with:
|
|
115
115
|
python-version: "3.10" # Minimum of PYVERSIONS
|
|
116
116
|
cache: pip
|
|
117
|
-
cache-dependency-path: 'requirements/*.
|
|
117
|
+
cache-dependency-path: 'requirements/*.txt'
|
|
118
118
|
|
|
119
119
|
- name: "Install dependencies"
|
|
120
120
|
run: |
|
|
121
|
-
python -m pip install -r requirements/tox.
|
|
121
|
+
python -m pip install -r requirements/tox.txt
|
|
122
122
|
|
|
123
123
|
- name: "Tox mypy"
|
|
124
124
|
run: |
|
|
@@ -149,7 +149,7 @@ jobs:
|
|
|
149
149
|
with:
|
|
150
150
|
python-version: "3.12" # Doc version from PYVERSIONS
|
|
151
151
|
cache: pip
|
|
152
|
-
cache-dependency-path: 'requirements/*.
|
|
152
|
+
cache-dependency-path: 'requirements/*.txt'
|
|
153
153
|
|
|
154
154
|
- name: "Show environment"
|
|
155
155
|
run: |
|
|
@@ -161,7 +161,7 @@ jobs:
|
|
|
161
161
|
- name: "Install dependencies"
|
|
162
162
|
run: |
|
|
163
163
|
set -xe
|
|
164
|
-
python -m pip install -r requirements/tox.
|
|
164
|
+
python -m pip install -r requirements/tox.txt
|
|
165
165
|
|
|
166
166
|
- name: "Tox doc"
|
|
167
167
|
run: |
|
|
@@ -185,7 +185,7 @@ jobs:
|
|
|
185
185
|
persist-credentials: false
|
|
186
186
|
|
|
187
187
|
- name: "Install uv"
|
|
188
|
-
uses: astral-sh/setup-uv@
|
|
188
|
+
uses: astral-sh/setup-uv@bec219d24cd3e171d82865faccec33120bb574f4 # v10.1.0
|
|
189
189
|
with:
|
|
190
190
|
enable-cache: false
|
|
191
191
|
|
|
@@ -55,7 +55,7 @@ jobs:
|
|
|
55
55
|
- "**.c"
|
|
56
56
|
- ".github/workflows/testsuite.yml"
|
|
57
57
|
- "tox.ini"
|
|
58
|
-
- "requirements/*.
|
|
58
|
+
- "requirements/*.txt"
|
|
59
59
|
- "tests/gold/**"
|
|
60
60
|
|
|
61
61
|
tests:
|
|
@@ -129,7 +129,7 @@ jobs:
|
|
|
129
129
|
# 3.10 on Windows. Commenting out the cache here fixed it. Someday
|
|
130
130
|
# try using the cache again.
|
|
131
131
|
#cache: pip
|
|
132
|
-
#cache-dependency-path: 'requirements/*.
|
|
132
|
+
#cache-dependency-path: 'requirements/*.txt'
|
|
133
133
|
|
|
134
134
|
- name: "Show environment"
|
|
135
135
|
run: |
|
|
@@ -149,7 +149,7 @@ jobs:
|
|
|
149
149
|
- name: "Install dependencies"
|
|
150
150
|
run: |
|
|
151
151
|
set -xe
|
|
152
|
-
python -m pip install -r requirements/tox.
|
|
152
|
+
python -m pip install -r requirements/tox.txt
|
|
153
153
|
|
|
154
154
|
- name: "Run tox for ${{ matrix.python-version }}"
|
|
155
155
|
run: |
|
|
@@ -168,9 +168,14 @@ jobs:
|
|
|
168
168
|
name: "Tests successful"
|
|
169
169
|
needs:
|
|
170
170
|
- tests
|
|
171
|
+
# Without this, GitHub skips this job when `tests` doesn't succeed, so the
|
|
172
|
+
# gate reports "skipped" instead of failing. `allowed-skips` keeps the
|
|
173
|
+
# deliberate skips (-notests branches, no test-relevant files) passing.
|
|
174
|
+
if: always()
|
|
171
175
|
runs-on: ubuntu-latest
|
|
172
176
|
steps:
|
|
173
177
|
- name: "Decide success or failure"
|
|
174
|
-
uses: re-actors/alls-green@
|
|
178
|
+
uses: re-actors/alls-green@b5b5b37504aa4183270bd3d855c52a67f212be35 # v1.3.0
|
|
175
179
|
with:
|
|
176
180
|
jobs: ${{ toJSON(needs) }}
|
|
181
|
+
allowed-skips: tests
|
|
@@ -22,6 +22,45 @@ upgrading your version of coverage.py.
|
|
|
22
22
|
|
|
23
23
|
.. start-releases
|
|
24
24
|
|
|
25
|
+
.. _changes_7-16-2:
|
|
26
|
+
|
|
27
|
+
Version 7.16.2 — 2026-09-27
|
|
28
|
+
---------------------------
|
|
29
|
+
|
|
30
|
+
- Fix: on Python 3.14 and later, a ``for`` loop completing immediately before a
|
|
31
|
+
function return could mistakenly report an uncovered branch. This is now
|
|
32
|
+
fixed, closing `issue 2168`_.
|
|
33
|
+
|
|
34
|
+
- Fix: on Python 3.14 and later, the ``else`` clause of a ``try`` whose body is
|
|
35
|
+
a ``with`` statement could incorrectly be reported as covered when the
|
|
36
|
+
``with`` raised. This is now fixed, closing `issue 2289`_.
|
|
37
|
+
|
|
38
|
+
- Fix: with ``dynamic_context = test_function``, test methods written as
|
|
39
|
+
``@staticmethod`` or ``@classmethod`` were not given a context of their own.
|
|
40
|
+
Now they are, on Python 3.11 and later. Closes `issue 1923`_.
|
|
41
|
+
|
|
42
|
+
.. _issue 1923: https://github.com/coveragepy/coveragepy/issues/1923
|
|
43
|
+
.. _issue 2168: https://github.com/coveragepy/coveragepy/issues/2168
|
|
44
|
+
.. _issue 2289: https://github.com/coveragepy/coveragepy/issues/2289
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
.. _changes_7-16-1:
|
|
48
|
+
|
|
49
|
+
Version 7.16.1 — 2026-09-13
|
|
50
|
+
---------------------------
|
|
51
|
+
|
|
52
|
+
- Fix: when the body of an irrefutable ``case`` (like ``case _:``) is entirely
|
|
53
|
+
excluded, the ``case`` line is now excluded too, just as an excluded
|
|
54
|
+
``else:`` body removes the ``else:`` line. Previously the ``case`` line was
|
|
55
|
+
left behind and reported as missing. Closes `issue 1563`_ with `pull 2269`_.
|
|
56
|
+
|
|
57
|
+
- Fix: using :meth:`.CoverageData.update` twice on an in-memory database would
|
|
58
|
+
fail, as described in `issue 2279`_. This is now fixed.
|
|
59
|
+
|
|
60
|
+
.. _issue 1563: https://github.com/coveragepy/coveragepy/issues/1563
|
|
61
|
+
.. _pull 2269: https://github.com/coveragepy/coveragepy/pull/2269
|
|
62
|
+
.. _issue 2279: https://github.com/coveragepy/coveragepy/issues/2279
|
|
63
|
+
|
|
25
64
|
.. _changes_7-16-0:
|
|
26
65
|
|
|
27
66
|
Version 7.16.0 — 2026-08-28
|
|
@@ -36,12 +36,12 @@ recursive-include .github *
|
|
|
36
36
|
recursive-include coverage *.pyi
|
|
37
37
|
recursive-include coverage/ctracer *.c *.h
|
|
38
38
|
|
|
39
|
-
recursive-include doc *.py *.in *.
|
|
39
|
+
recursive-include doc *.py *.in *.rst *.txt *.png
|
|
40
40
|
recursive-include doc/_static *
|
|
41
41
|
prune doc/_build
|
|
42
42
|
prune doc/_spell
|
|
43
43
|
|
|
44
|
-
recursive-include requirements *.in *.
|
|
44
|
+
recursive-include requirements *.in *.txt
|
|
45
45
|
|
|
46
46
|
recursive-include tests *.py *.tok
|
|
47
47
|
recursive-include tests/gold *
|
|
@@ -75,7 +75,7 @@ venv: .venv #- Create a virtualenv in .venv.
|
|
|
75
75
|
$(VENV)
|
|
76
76
|
|
|
77
77
|
install: venv #- Install the developer tools.
|
|
78
|
-
$(INSTALL_R) requirements/dev.
|
|
78
|
+
$(INSTALL_R) requirements/dev.txt
|
|
79
79
|
|
|
80
80
|
|
|
81
81
|
### Tests and quality checks
|
|
@@ -112,11 +112,11 @@ metahtml: #- Produce meta-coverage HTML reports.
|
|
|
112
112
|
|
|
113
113
|
# When updating requirements, a few rules to follow:
|
|
114
114
|
#
|
|
115
|
-
# 1) Don't install more than one .
|
|
116
|
-
# combine .in files onto a single .
|
|
115
|
+
# 1) Don't install more than one .txt file at once. Always use pip-compile to
|
|
116
|
+
# combine .in files onto a single .txt file that can be installed where needed.
|
|
117
117
|
#
|
|
118
118
|
# 2) Check manual pins before `make upgrade` to see if they can be removed. Look
|
|
119
|
-
# in requirements/pins.
|
|
119
|
+
# in requirements/pins.txt, and search for "windows" in .in files to find pins
|
|
120
120
|
# and extra requirements that have been needed, but might be obsolete.
|
|
121
121
|
|
|
122
122
|
.PHONY: upgrade upgrade_one _upgrade diff_upgrade
|
|
@@ -135,24 +135,24 @@ PIP_COMPILE = uv pip compile -q --universal --generate-hashes ${COMPILE_OPTS}
|
|
|
135
135
|
# Limit to packages that were released more than 10 days ago.
|
|
136
136
|
# https://blog.yossarian.net/2025/11/21/We-should-all-be-using-dependency-cooldowns
|
|
137
137
|
upgrade: export UV_EXCLUDE_NEWER=P10D
|
|
138
|
-
upgrade: #- Update the *.
|
|
138
|
+
upgrade: #- Update the *.txt files with the latest packages satisfying *.in files.
|
|
139
139
|
$(MAKE) _upgrade COMPILE_OPTS="--upgrade"
|
|
140
140
|
|
|
141
141
|
# Upgrade just one package, with no cooldown.
|
|
142
|
-
upgrade_one: #- Update the *.
|
|
142
|
+
upgrade_one: #- Update the *.txt files for one package. `make upgrade_one package=...`
|
|
143
143
|
@test -n "$(package)" || { echo "\nUsage: make upgrade_one package=...\n"; exit 1; }
|
|
144
144
|
$(MAKE) _upgrade COMPILE_OPTS="--upgrade-package $(package)"
|
|
145
145
|
|
|
146
146
|
_upgrade: export UV_CUSTOM_COMPILE_COMMAND=make upgrade
|
|
147
147
|
_upgrade: $(DOCBIN) $(KITBIN)
|
|
148
|
-
$(PIP_COMPILE) -o requirements/pip.
|
|
149
|
-
$(PIP_COMPILE) -o requirements/pytest.
|
|
150
|
-
$(PIP_COMPILE) -p $(KITBIN)/python3 -o requirements/kit.
|
|
151
|
-
$(PIP_COMPILE) -o requirements/tox.
|
|
152
|
-
$(PIP_COMPILE) -o requirements/dev.
|
|
153
|
-
$(PIP_COMPILE) -o requirements/light-threads.
|
|
154
|
-
$(PIP_COMPILE) -o requirements/mypy.
|
|
155
|
-
$(PIP_COMPILE) -p $(DOCBIN)/python3 -o doc/requirements.
|
|
148
|
+
$(PIP_COMPILE) -o requirements/pip.txt requirements/pip.in
|
|
149
|
+
$(PIP_COMPILE) -o requirements/pytest.txt requirements/pytest.in
|
|
150
|
+
$(PIP_COMPILE) -p $(KITBIN)/python3 -o requirements/kit.txt requirements/kit.in
|
|
151
|
+
$(PIP_COMPILE) -o requirements/tox.txt requirements/tox.in
|
|
152
|
+
$(PIP_COMPILE) -o requirements/dev.txt requirements/dev.in
|
|
153
|
+
$(PIP_COMPILE) -o requirements/light-threads.txt requirements/light-threads.in
|
|
154
|
+
$(PIP_COMPILE) -o requirements/mypy.txt requirements/mypy.in
|
|
155
|
+
$(PIP_COMPILE) -p $(DOCBIN)/python3 -o doc/requirements.txt doc/requirements.in
|
|
156
156
|
PYTHONWARNDEFAULTENCODING= pre-commit autoupdate
|
|
157
157
|
|
|
158
158
|
diff_upgrade: #- Summarize the last `make upgrade`.
|
|
@@ -208,7 +208,7 @@ sample_html_beta: _sample_cog_html #- Generate sample HTML report for a beta rel
|
|
|
208
208
|
|
|
209
209
|
### Kitting: making releases
|
|
210
210
|
|
|
211
|
-
.PHONY: release_version edit_for_release cheats relbranch
|
|
211
|
+
.PHONY: release_version edit_for_release cheats relbranch relcommit
|
|
212
212
|
.PHONY: kit pypi_upload test_upload build_kits update_rtd
|
|
213
213
|
.PHONY: _check_github_auth download_kits
|
|
214
214
|
.PHONY: tag bump_version
|
|
@@ -228,7 +228,7 @@ cheats: #- Create some useful snippets for releasing.
|
|
|
228
228
|
relbranch: # Create the branch for releasing (see howto.txt).
|
|
229
229
|
git switch -c nedbat/release-$$(date +%Y%m%d-%H%M%S)
|
|
230
230
|
|
|
231
|
-
|
|
231
|
+
relcommit: # Commit the release changes (see howto.txt).
|
|
232
232
|
git commit -am "docs: prep for $$(python setup.py --version)"
|
|
233
233
|
|
|
234
234
|
kit: #- Make a source distribution and some wheels.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: coverage
|
|
3
|
-
Version: 7.16.
|
|
3
|
+
Version: 7.16.2
|
|
4
4
|
Summary: Code coverage measurement for Python
|
|
5
5
|
Home-page: https://github.com/coveragepy/coveragepy
|
|
6
6
|
Author: Ned Batchelder and 263 others
|
|
7
7
|
Author-email: ned@nedbatchelder.com
|
|
8
8
|
License: Apache-2.0
|
|
9
|
-
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.
|
|
9
|
+
Project-URL: Documentation, https://coverage.readthedocs.io/en/7.16.2
|
|
10
10
|
Project-URL: Funding, https://tidelift.com/subscription/pkg/pypi-coverage?utm_source=pypi-coverage&utm_medium=referral&utm_campaign=pypi
|
|
11
11
|
Project-URL: Issues, https://github.com/coveragepy/coveragepy/issues
|
|
12
12
|
Project-URL: Mastodon, https://hachyderm.io/@coveragepy
|
|
@@ -68,7 +68,6 @@ Code coverage measurement for Python.
|
|
|
68
68
|
| |kit| |license| |versions|
|
|
69
69
|
| |test-status| |quality-status| |docs| |metacov|
|
|
70
70
|
| |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|
|
|
71
|
-
|bluesky-nedbat|
|
|
72
71
|
|
|
73
72
|
Coverage.py measures code coverage, typically during test execution. It uses
|
|
74
73
|
the code analysis tools and tracing hooks provided in the Python standard
|
|
@@ -78,13 +77,13 @@ Coverage.py runs on these versions of Python:
|
|
|
78
77
|
|
|
79
78
|
.. PYVERSIONS
|
|
80
79
|
|
|
81
|
-
* Python 3.10 through 3.15
|
|
80
|
+
* Python 3.10 through 3.15 rc2, including free-threading.
|
|
82
81
|
* PyPy3 versions 3.10 and 3.11.
|
|
83
82
|
|
|
84
83
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
85
84
|
`GitHub`_.
|
|
86
85
|
|
|
87
|
-
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.
|
|
86
|
+
.. _Read the Docs: https://coverage.readthedocs.io/en/7.16.2/
|
|
88
87
|
.. _GitHub: https://github.com/coveragepy/coveragepy
|
|
89
88
|
|
|
90
89
|
|
|
@@ -113,7 +112,7 @@ Getting Started
|
|
|
113
112
|
Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
|
|
114
113
|
of the docs.
|
|
115
114
|
|
|
116
|
-
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.
|
|
115
|
+
.. _Quick Start section: https://coverage.readthedocs.io/en/7.16.2/#quick-start
|
|
117
116
|
|
|
118
117
|
|
|
119
118
|
Change history
|
|
@@ -121,7 +120,7 @@ Change history
|
|
|
121
120
|
|
|
122
121
|
The complete history of changes is on the `change history page`_.
|
|
123
122
|
|
|
124
|
-
.. _change history page: https://coverage.readthedocs.io/en/7.16.
|
|
123
|
+
.. _change history page: https://coverage.readthedocs.io/en/7.16.2/changes.html
|
|
125
124
|
|
|
126
125
|
|
|
127
126
|
Code of Conduct
|
|
@@ -140,7 +139,7 @@ Contributing
|
|
|
140
139
|
Found a bug? Want to help improve the code or documentation? See the
|
|
141
140
|
`Contributing section`_ of the docs.
|
|
142
141
|
|
|
143
|
-
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.
|
|
142
|
+
.. _Contributing section: https://coverage.readthedocs.io/en/7.16.2/contributing.html
|
|
144
143
|
|
|
145
144
|
|
|
146
145
|
Security
|
|
@@ -168,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
168
167
|
:target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
|
|
169
168
|
:alt: Quality check status
|
|
170
169
|
.. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
|
|
171
|
-
:target: https://coverage.readthedocs.io/en/7.16.
|
|
170
|
+
:target: https://coverage.readthedocs.io/en/7.16.2/
|
|
172
171
|
:alt: Documentation
|
|
173
172
|
.. |kit| image:: https://img.shields.io/pypi/v/coverage
|
|
174
173
|
:target: https://pypi.org/project/coverage/
|
|
@@ -194,9 +193,6 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
194
193
|
.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@coveragepy&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy
|
|
195
194
|
:target: https://hachyderm.io/@coveragepy
|
|
196
195
|
:alt: coveragepy on Mastodon
|
|
197
|
-
.. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&color=96a3b0&labelColor=3686f7&logo=icloud&logoColor=white&label=@nedbat&url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com&query=followersCount
|
|
198
|
-
:target: https://bsky.app/profile/nedbat.com
|
|
199
|
-
:alt: nedbat on Bluesky
|
|
200
196
|
.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub
|
|
201
197
|
:target: https://github.com/sponsors/nedbat
|
|
202
198
|
:alt: Sponsor me on GitHub
|
|
@@ -16,7 +16,6 @@ Code coverage measurement for Python.
|
|
|
16
16
|
| |kit| |license| |versions|
|
|
17
17
|
| |test-status| |quality-status| |docs| |metacov|
|
|
18
18
|
| |tidelift| |sponsor| |stars| |mastodon-coveragepy| |mastodon-nedbat|
|
|
19
|
-
|bluesky-nedbat|
|
|
20
19
|
|
|
21
20
|
Coverage.py measures code coverage, typically during test execution. It uses
|
|
22
21
|
the code analysis tools and tracing hooks provided in the Python standard
|
|
@@ -26,7 +25,7 @@ Coverage.py runs on these versions of Python:
|
|
|
26
25
|
|
|
27
26
|
.. PYVERSIONS
|
|
28
27
|
|
|
29
|
-
* Python 3.10 through 3.15
|
|
28
|
+
* Python 3.10 through 3.15 rc2, including free-threading.
|
|
30
29
|
* PyPy3 versions 3.10 and 3.11.
|
|
31
30
|
|
|
32
31
|
Documentation is on `Read the Docs`_. Code repository and issue tracker are on
|
|
@@ -142,9 +141,6 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
|
|
|
142
141
|
.. |mastodon-coveragepy| image:: https://img.shields.io/badge/dynamic/json?style=flat&labelColor=450657&logo=mastodon&logoColor=ffffff&label=@coveragepy&query=followers_count&url=https%3A%2F%2Fhachyderm.io%2Fapi%2Fv1%2Faccounts%2Flookup%3Facct=coveragepy
|
|
143
142
|
:target: https://hachyderm.io/@coveragepy
|
|
144
143
|
:alt: coveragepy on Mastodon
|
|
145
|
-
.. |bluesky-nedbat| image:: https://img.shields.io/badge/dynamic/json?style=flat&color=96a3b0&labelColor=3686f7&logo=icloud&logoColor=white&label=@nedbat&url=https%3A%2F%2Fpublic.api.bsky.app%2Fxrpc%2Fapp.bsky.actor.getProfile%3Factor=nedbat.com&query=followersCount
|
|
146
|
-
:target: https://bsky.app/profile/nedbat.com
|
|
147
|
-
:alt: nedbat on Bluesky
|
|
148
144
|
.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub
|
|
149
145
|
:target: https://github.com/sponsors/nedbat
|
|
150
146
|
:alt: Sponsor me on GitHub
|
|
@@ -106,6 +106,10 @@ RETURNS = op_set(
|
|
|
106
106
|
"RETURN_GENERATOR",
|
|
107
107
|
)
|
|
108
108
|
|
|
109
|
+
# Opcodes that do not fall through. The bytecode after them belongs to
|
|
110
|
+
# another path (for example the swallowed-exception side of a with).
|
|
111
|
+
NO_FALL_THROUGH = op_set("RERAISE")
|
|
112
|
+
|
|
109
113
|
|
|
110
114
|
# CACHE doesn't exist in Python 3.10, but the branch resolver is only used
|
|
111
115
|
# on 3.14+, so a placeholder value is fine.
|
|
@@ -203,6 +207,8 @@ class BranchArcResolver:
|
|
|
203
207
|
return None
|
|
204
208
|
if op in RETURNS:
|
|
205
209
|
return (from_line, -self.code.co_firstlineno)
|
|
210
|
+
if op in NO_FALL_THROUGH:
|
|
211
|
+
return None
|
|
206
212
|
ext_arg = 0
|
|
207
213
|
offset += 2
|
|
208
214
|
return None
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
8
|
from collections.abc import Sequence
|
|
9
|
+
from inspect import CO_OPTIMIZED # pylint: disable=no-name-in-module
|
|
9
10
|
from types import FrameType
|
|
10
11
|
|
|
11
12
|
from coverage.types import TShouldStartContextFn
|
|
@@ -63,6 +64,12 @@ def qualname_from_frame(frame: FrameType) -> str | None:
|
|
|
63
64
|
if method is None:
|
|
64
65
|
func = frame.f_globals.get(fname)
|
|
65
66
|
if func is None:
|
|
67
|
+
# Static and class methods have no `self` and aren't in the module
|
|
68
|
+
# globals, but the code object knows its own qualified name.
|
|
69
|
+
# PYVERSIONS: co_qualname is 3.11+
|
|
70
|
+
qualname = getattr(co, "co_qualname", None)
|
|
71
|
+
if qualname and co.co_flags & CO_OPTIMIZED and "<locals>" not in qualname:
|
|
72
|
+
return f"{frame.f_globals.get('__name__')}.{qualname}"
|
|
66
73
|
return None
|
|
67
74
|
return f"{func.__module__}.{fname}"
|
|
68
75
|
|
|
@@ -771,6 +771,19 @@ CTracer_handle_return(CTracer *self, PyFrameObject *frame)
|
|
|
771
771
|
real_return = !(is_yield || is_yield_from);
|
|
772
772
|
#endif
|
|
773
773
|
if (real_return) {
|
|
774
|
+
#if PY_VERSION_HEX >= 0x030E0000
|
|
775
|
+
/* Python 3.14 can report a new line only on the return event. */
|
|
776
|
+
int return_line = PyFrame_GetLineNumber(frame);
|
|
777
|
+
if (
|
|
778
|
+
self->pcur_entry->file_tracer == Py_None &&
|
|
779
|
+
return_line != self->pcur_entry->last_line
|
|
780
|
+
) {
|
|
781
|
+
if (CTracer_record_pair(self, self->pcur_entry->last_line, return_line) < 0) {
|
|
782
|
+
goto error;
|
|
783
|
+
}
|
|
784
|
+
self->pcur_entry->last_line = return_line;
|
|
785
|
+
}
|
|
786
|
+
#endif
|
|
774
787
|
int first = MyFrame_BorrowCode(frame)->co_firstlineno;
|
|
775
788
|
if (CTracer_record_pair(self, self->pcur_entry->last_line, -first) < 0) {
|
|
776
789
|
goto error;
|
|
@@ -373,15 +373,12 @@ def filter_text(text: str, filters: Iterable[Callable[[str], str]]) -> str:
|
|
|
373
373
|
run.
|
|
374
374
|
|
|
375
375
|
"""
|
|
376
|
-
clean_text = text.rstrip()
|
|
377
|
-
ending = text[len(clean_text) :]
|
|
378
|
-
text = clean_text
|
|
379
376
|
for filter_fn in filters:
|
|
380
377
|
lines = []
|
|
381
|
-
for line in text.splitlines():
|
|
382
|
-
lines.extend(filter_fn(line).splitlines())
|
|
383
|
-
text = "
|
|
384
|
-
return text
|
|
378
|
+
for line in text.splitlines(keepends=True):
|
|
379
|
+
lines.extend(filter_fn(line).splitlines(keepends=True))
|
|
380
|
+
text = "".join(lines)
|
|
381
|
+
return text
|
|
385
382
|
|
|
386
383
|
|
|
387
384
|
class CwdTracker:
|
|
@@ -237,7 +237,7 @@ class Matcher(abc.ABC):
|
|
|
237
237
|
return f"<{self.__class__.__name__} {self.name} {self.strs!r}>"
|
|
238
238
|
|
|
239
239
|
@abc.abstractmethod
|
|
240
|
-
def match(self, s: str) -> bool:
|
|
240
|
+
def match(self, s: str, /) -> bool:
|
|
241
241
|
"""Does this string match?"""
|
|
242
242
|
|
|
243
243
|
def info(self) -> list[str]:
|
|
@@ -270,7 +270,7 @@ class TreeMatcher(Matcher):
|
|
|
270
270
|
debug(f" Normalized {p!r} to {ap!r}")
|
|
271
271
|
self.paths.append(ap)
|
|
272
272
|
|
|
273
|
-
def match(self, fpath: str) -> bool:
|
|
273
|
+
def match(self, fpath: str, /) -> bool:
|
|
274
274
|
"""Does `fpath` indicate a file in one of our trees?"""
|
|
275
275
|
fpath = abs_file(fpath)
|
|
276
276
|
for p in self.paths:
|
|
@@ -297,7 +297,7 @@ class ModuleMatcher(Matcher):
|
|
|
297
297
|
self.modules = list(module_names)
|
|
298
298
|
super().__init__(self.modules, name=name, caption=caption, debug=debug)
|
|
299
299
|
|
|
300
|
-
def match(self, module_name: str) -> bool:
|
|
300
|
+
def match(self, module_name: str, /) -> bool:
|
|
301
301
|
"""Does `module_name` indicate a module in one of our packages?"""
|
|
302
302
|
if not module_name:
|
|
303
303
|
return False
|
|
@@ -327,7 +327,7 @@ class GlobMatcher(Matcher):
|
|
|
327
327
|
super().__init__(self.pats, name=name, caption=caption, debug=debug)
|
|
328
328
|
self.re = globs_to_regex(self.pats, case_insensitive=env.WINDOWS)
|
|
329
329
|
|
|
330
|
-
def match(self, fpath: str) -> bool:
|
|
330
|
+
def match(self, fpath: str, /) -> bool:
|
|
331
331
|
"""Does `fpath` match one of our file name patterns?"""
|
|
332
332
|
return self.re.match(fpath) is not None
|
|
333
333
|
|