coverage 7.15.0__tar.gz → 7.15.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.
Files changed (404) hide show
  1. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/codeql-analysis.yml +3 -3
  2. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/coverage.yml +11 -3
  3. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/kit.yml +3 -3
  4. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/publish.yml +2 -2
  5. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/quality.yml +4 -4
  6. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/testsuite.yml +2 -2
  7. {coverage-7.15.0 → coverage-7.15.2}/.pre-commit-config.yaml +1 -1
  8. {coverage-7.15.0 → coverage-7.15.2}/CHANGES.rst +37 -0
  9. {coverage-7.15.0 → coverage-7.15.2}/CONTRIBUTORS.txt +2 -0
  10. {coverage-7.15.0 → coverage-7.15.2}/PKG-INFO +8 -8
  11. coverage-7.15.2/coverage/bytecode.py +208 -0
  12. {coverage-7.15.0 → coverage-7.15.2}/coverage/control.py +5 -7
  13. {coverage-7.15.0 → coverage-7.15.2}/coverage/html.py +12 -3
  14. {coverage-7.15.0 → coverage-7.15.2}/coverage/parser.py +122 -45
  15. {coverage-7.15.0 → coverage-7.15.2}/coverage/python.py +0 -1
  16. {coverage-7.15.0 → coverage-7.15.2}/coverage/report_core.py +8 -2
  17. {coverage-7.15.0 → coverage-7.15.2}/coverage/sysmon.py +47 -55
  18. {coverage-7.15.0 → coverage-7.15.2}/coverage/version.py +1 -1
  19. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/PKG-INFO +8 -8
  20. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/SOURCES.txt +1 -0
  21. {coverage-7.15.0 → coverage-7.15.2}/doc/changes.rst +14 -12
  22. {coverage-7.15.0 → coverage-7.15.2}/doc/conf.py +3 -3
  23. {coverage-7.15.0 → coverage-7.15.2}/doc/requirements.pip +12 -12
  24. {coverage-7.15.0 → coverage-7.15.2}/howto.txt +1 -1
  25. {coverage-7.15.0 → coverage-7.15.2}/igor.py +1 -2
  26. {coverage-7.15.0 → coverage-7.15.2}/requirements/dev.pip +207 -210
  27. {coverage-7.15.0 → coverage-7.15.2}/requirements/kit.pip +87 -90
  28. {coverage-7.15.0 → coverage-7.15.2}/requirements/light-threads.pip +80 -80
  29. {coverage-7.15.0 → coverage-7.15.2}/requirements/mypy.pip +6 -6
  30. {coverage-7.15.0 → coverage-7.15.2}/requirements/pip.pip +12 -12
  31. {coverage-7.15.0 → coverage-7.15.2}/requirements/pytest.pip +6 -6
  32. {coverage-7.15.0 → coverage-7.15.2}/requirements/tox.pip +15 -15
  33. {coverage-7.15.0 → coverage-7.15.2}/tests/test_html.py +22 -0
  34. {coverage-7.15.0 → coverage-7.15.2}/tests/test_parser.py +170 -1
  35. coverage-7.15.2/tests/test_sysmon.py +76 -0
  36. coverage-7.15.0/coverage/bytecode.py +0 -255
  37. {coverage-7.15.0 → coverage-7.15.2}/.editorconfig +0 -0
  38. {coverage-7.15.0 → coverage-7.15.2}/.git-blame-ignore-revs +0 -0
  39. {coverage-7.15.0 → coverage-7.15.2}/.github/CODE_OF_CONDUCT.md +0 -0
  40. {coverage-7.15.0 → coverage-7.15.2}/.github/FUNDING.yml +0 -0
  41. {coverage-7.15.0 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  42. {coverage-7.15.0 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  43. {coverage-7.15.0 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
  44. {coverage-7.15.0 → coverage-7.15.2}/.github/ISSUE_TEMPLATE/support.md +0 -0
  45. {coverage-7.15.0 → coverage-7.15.2}/.github/SECURITY.md +0 -0
  46. {coverage-7.15.0 → coverage-7.15.2}/.github/dependabot.yml +0 -0
  47. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/dependency-review.yml +0 -0
  48. {coverage-7.15.0 → coverage-7.15.2}/.github/workflows/python-nightly.yml +0 -0
  49. {coverage-7.15.0 → coverage-7.15.2}/.github/zizmor.yml +0 -0
  50. {coverage-7.15.0 → coverage-7.15.2}/.ignore +0 -0
  51. {coverage-7.15.0 → coverage-7.15.2}/.readthedocs.yaml +0 -0
  52. {coverage-7.15.0 → coverage-7.15.2}/CITATION.cff +0 -0
  53. {coverage-7.15.0 → coverage-7.15.2}/LICENSE.txt +0 -0
  54. {coverage-7.15.0 → coverage-7.15.2}/MANIFEST.in +0 -0
  55. {coverage-7.15.0 → coverage-7.15.2}/Makefile +0 -0
  56. {coverage-7.15.0 → coverage-7.15.2}/NOTICE.txt +0 -0
  57. {coverage-7.15.0 → coverage-7.15.2}/README.rst +0 -0
  58. {coverage-7.15.0 → coverage-7.15.2}/__main__.py +0 -0
  59. {coverage-7.15.0 → coverage-7.15.2}/a1_coverage.pth +0 -0
  60. {coverage-7.15.0 → coverage-7.15.2}/ci/README.txt +0 -0
  61. {coverage-7.15.0 → coverage-7.15.2}/ci/comment_on_fixes.py +0 -0
  62. {coverage-7.15.0 → coverage-7.15.2}/ci/session.py +0 -0
  63. {coverage-7.15.0 → coverage-7.15.2}/ci/trigger_action.py +0 -0
  64. {coverage-7.15.0 → coverage-7.15.2}/ci/update_rtfd.py +0 -0
  65. {coverage-7.15.0 → coverage-7.15.2}/coverage/__init__.py +0 -0
  66. {coverage-7.15.0 → coverage-7.15.2}/coverage/__main__.py +0 -0
  67. {coverage-7.15.0 → coverage-7.15.2}/coverage/annotate.py +0 -0
  68. {coverage-7.15.0 → coverage-7.15.2}/coverage/cmdline.py +0 -0
  69. {coverage-7.15.0 → coverage-7.15.2}/coverage/collector.py +0 -0
  70. {coverage-7.15.0 → coverage-7.15.2}/coverage/config.py +0 -0
  71. {coverage-7.15.0 → coverage-7.15.2}/coverage/context.py +0 -0
  72. {coverage-7.15.0 → coverage-7.15.2}/coverage/core.py +0 -0
  73. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/datastack.c +0 -0
  74. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/datastack.h +0 -0
  75. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/filedisp.c +0 -0
  76. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/filedisp.h +0 -0
  77. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/module.c +0 -0
  78. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/stats.h +0 -0
  79. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/tracer.c +0 -0
  80. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/tracer.h +0 -0
  81. {coverage-7.15.0 → coverage-7.15.2}/coverage/ctracer/util.h +0 -0
  82. {coverage-7.15.0 → coverage-7.15.2}/coverage/data.py +0 -0
  83. {coverage-7.15.0 → coverage-7.15.2}/coverage/debug.py +0 -0
  84. {coverage-7.15.0 → coverage-7.15.2}/coverage/disposition.py +0 -0
  85. {coverage-7.15.0 → coverage-7.15.2}/coverage/env.py +0 -0
  86. {coverage-7.15.0 → coverage-7.15.2}/coverage/exceptions.py +0 -0
  87. {coverage-7.15.0 → coverage-7.15.2}/coverage/execfile.py +0 -0
  88. {coverage-7.15.0 → coverage-7.15.2}/coverage/files.py +0 -0
  89. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/coverage_html.js +0 -0
  90. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/favicon_32.png +0 -0
  91. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/index.html +0 -0
  92. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/keybd_closed.png +0 -0
  93. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/pyfile.html +0 -0
  94. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/style.css +0 -0
  95. {coverage-7.15.0 → coverage-7.15.2}/coverage/htmlfiles/style.scss +0 -0
  96. {coverage-7.15.0 → coverage-7.15.2}/coverage/inorout.py +0 -0
  97. {coverage-7.15.0 → coverage-7.15.2}/coverage/jsonreport.py +0 -0
  98. {coverage-7.15.0 → coverage-7.15.2}/coverage/lcovreport.py +0 -0
  99. {coverage-7.15.0 → coverage-7.15.2}/coverage/misc.py +0 -0
  100. {coverage-7.15.0 → coverage-7.15.2}/coverage/multiproc.py +0 -0
  101. {coverage-7.15.0 → coverage-7.15.2}/coverage/numbits.py +0 -0
  102. {coverage-7.15.0 → coverage-7.15.2}/coverage/patch.py +0 -0
  103. {coverage-7.15.0 → coverage-7.15.2}/coverage/phystokens.py +0 -0
  104. {coverage-7.15.0 → coverage-7.15.2}/coverage/plugin.py +0 -0
  105. {coverage-7.15.0 → coverage-7.15.2}/coverage/plugin_support.py +0 -0
  106. {coverage-7.15.0 → coverage-7.15.2}/coverage/pth_file.py +0 -0
  107. {coverage-7.15.0 → coverage-7.15.2}/coverage/py.typed +0 -0
  108. {coverage-7.15.0 → coverage-7.15.2}/coverage/pytracer.py +0 -0
  109. {coverage-7.15.0 → coverage-7.15.2}/coverage/regions.py +0 -0
  110. {coverage-7.15.0 → coverage-7.15.2}/coverage/report.py +0 -0
  111. {coverage-7.15.0 → coverage-7.15.2}/coverage/results.py +0 -0
  112. {coverage-7.15.0 → coverage-7.15.2}/coverage/sqldata.py +0 -0
  113. {coverage-7.15.0 → coverage-7.15.2}/coverage/sqlitedb.py +0 -0
  114. {coverage-7.15.0 → coverage-7.15.2}/coverage/templite.py +0 -0
  115. {coverage-7.15.0 → coverage-7.15.2}/coverage/tomlconfig.py +0 -0
  116. {coverage-7.15.0 → coverage-7.15.2}/coverage/tracer.pyi +0 -0
  117. {coverage-7.15.0 → coverage-7.15.2}/coverage/types.py +0 -0
  118. {coverage-7.15.0 → coverage-7.15.2}/coverage/xmlreport.py +0 -0
  119. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/dependency_links.txt +0 -0
  120. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/entry_points.txt +0 -0
  121. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/not-zip-safe +0 -0
  122. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/requires.txt +0 -0
  123. {coverage-7.15.0 → coverage-7.15.2}/coverage.egg-info/top_level.txt +0 -0
  124. {coverage-7.15.0 → coverage-7.15.2}/doc/_static/coverage.css +0 -0
  125. {coverage-7.15.0 → coverage-7.15.2}/doc/api.rst +0 -0
  126. {coverage-7.15.0 → coverage-7.15.2}/doc/api_coverage.rst +0 -0
  127. {coverage-7.15.0 → coverage-7.15.2}/doc/api_coveragedata.rst +0 -0
  128. {coverage-7.15.0 → coverage-7.15.2}/doc/api_exceptions.rst +0 -0
  129. {coverage-7.15.0 → coverage-7.15.2}/doc/api_module.rst +0 -0
  130. {coverage-7.15.0 → coverage-7.15.2}/doc/api_plugin.rst +0 -0
  131. {coverage-7.15.0 → coverage-7.15.2}/doc/branch.rst +0 -0
  132. {coverage-7.15.0 → coverage-7.15.2}/doc/cog_helpers.py +0 -0
  133. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_annotate.rst +0 -0
  134. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_combine.rst +0 -0
  135. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_debug.rst +0 -0
  136. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_erase.rst +0 -0
  137. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_html.rst +0 -0
  138. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_json.rst +0 -0
  139. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_lcov.rst +0 -0
  140. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_report.rst +0 -0
  141. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_reporting.rst +0 -0
  142. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_run.rst +0 -0
  143. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/cmd_xml.rst +0 -0
  144. {coverage-7.15.0 → coverage-7.15.2}/doc/commands/index.rst +0 -0
  145. {coverage-7.15.0 → coverage-7.15.2}/doc/config.rst +0 -0
  146. {coverage-7.15.0 → coverage-7.15.2}/doc/contexts.rst +0 -0
  147. {coverage-7.15.0 → coverage-7.15.2}/doc/contributing.rst +0 -0
  148. {coverage-7.15.0 → coverage-7.15.2}/doc/dbschema.rst +0 -0
  149. {coverage-7.15.0 → coverage-7.15.2}/doc/dict.txt +0 -0
  150. {coverage-7.15.0 → coverage-7.15.2}/doc/excluding.rst +0 -0
  151. {coverage-7.15.0 → coverage-7.15.2}/doc/faq.rst +0 -0
  152. {coverage-7.15.0 → coverage-7.15.2}/doc/howitworks.rst +0 -0
  153. {coverage-7.15.0 → coverage-7.15.2}/doc/index.rst +0 -0
  154. {coverage-7.15.0 → coverage-7.15.2}/doc/install.rst +0 -0
  155. {coverage-7.15.0 → coverage-7.15.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White.png +0 -0
  156. {coverage-7.15.0 → coverage-7.15.2}/doc/media/Tidelift_Logos_RGB_Tidelift_Shorthand_On-White_small.png +0 -0
  157. {coverage-7.15.0 → coverage-7.15.2}/doc/media/sleepy-snake-600.png +0 -0
  158. {coverage-7.15.0 → coverage-7.15.2}/doc/media/sleepy-snake-circle-150.png +0 -0
  159. {coverage-7.15.0 → coverage-7.15.2}/doc/messages.rst +0 -0
  160. {coverage-7.15.0 → coverage-7.15.2}/doc/migrating.rst +0 -0
  161. {coverage-7.15.0 → coverage-7.15.2}/doc/other.rst +0 -0
  162. {coverage-7.15.0 → coverage-7.15.2}/doc/plugins.rst +0 -0
  163. {coverage-7.15.0 → coverage-7.15.2}/doc/python-coverage.1.txt +0 -0
  164. {coverage-7.15.0 → coverage-7.15.2}/doc/requirements.in +0 -0
  165. {coverage-7.15.0 → coverage-7.15.2}/doc/sample_html/favicon_32_cb_c827f16f.png +0 -0
  166. {coverage-7.15.0 → coverage-7.15.2}/doc/sample_html/keybd_closed_cb_900cfef5.png +0 -0
  167. {coverage-7.15.0 → coverage-7.15.2}/doc/sleepy.rst +0 -0
  168. {coverage-7.15.0 → coverage-7.15.2}/doc/source.rst +0 -0
  169. {coverage-7.15.0 → coverage-7.15.2}/doc/subprocess.rst +0 -0
  170. {coverage-7.15.0 → coverage-7.15.2}/doc/trouble.rst +0 -0
  171. {coverage-7.15.0 → coverage-7.15.2}/doc/whatsnew5x.rst +0 -0
  172. {coverage-7.15.0 → coverage-7.15.2}/lab/README.txt +0 -0
  173. {coverage-7.15.0 → coverage-7.15.2}/lab/branches.py +0 -0
  174. {coverage-7.15.0 → coverage-7.15.2}/lab/compare_times.sh +0 -0
  175. {coverage-7.15.0 → coverage-7.15.2}/lab/coverage-04.dtd +0 -0
  176. {coverage-7.15.0 → coverage-7.15.2}/lab/extract_code.py +0 -0
  177. {coverage-7.15.0 → coverage-7.15.2}/lab/goals.py +0 -0
  178. {coverage-7.15.0 → coverage-7.15.2}/lab/hack_pyc.py +0 -0
  179. {coverage-7.15.0 → coverage-7.15.2}/lab/notes/arcs-to-branches.txt +0 -0
  180. {coverage-7.15.0 → coverage-7.15.2}/lab/notes/bug1303.txt +0 -0
  181. {coverage-7.15.0 → coverage-7.15.2}/lab/notes/pypy-738-decorated-functions.txt +0 -0
  182. {coverage-7.15.0 → coverage-7.15.2}/lab/parse_all.py +0 -0
  183. {coverage-7.15.0 → coverage-7.15.2}/lab/parser.py +0 -0
  184. {coverage-7.15.0 → coverage-7.15.2}/lab/pick.py +0 -0
  185. {coverage-7.15.0 → coverage-7.15.2}/lab/platform_info.py +0 -0
  186. {coverage-7.15.0 → coverage-7.15.2}/lab/run_sysmon.py +0 -0
  187. {coverage-7.15.0 → coverage-7.15.2}/lab/run_trace.py +0 -0
  188. {coverage-7.15.0 → coverage-7.15.2}/lab/select_contexts.py +0 -0
  189. {coverage-7.15.0 → coverage-7.15.2}/lab/show_platform.py +0 -0
  190. {coverage-7.15.0 → coverage-7.15.2}/lab/show_pyc.py +0 -0
  191. {coverage-7.15.0 → coverage-7.15.2}/lab/treetopy.sh +0 -0
  192. {coverage-7.15.0 → coverage-7.15.2}/lab/warn_executed.py +0 -0
  193. {coverage-7.15.0 → coverage-7.15.2}/lab/warn_executed.toml +0 -0
  194. {coverage-7.15.0 → coverage-7.15.2}/metacov.ini +0 -0
  195. {coverage-7.15.0 → coverage-7.15.2}/pyproject.toml +0 -0
  196. {coverage-7.15.0 → coverage-7.15.2}/requirements/dev.in +0 -0
  197. {coverage-7.15.0 → coverage-7.15.2}/requirements/kit.in +0 -0
  198. {coverage-7.15.0 → coverage-7.15.2}/requirements/light-threads.in +0 -0
  199. {coverage-7.15.0 → coverage-7.15.2}/requirements/mypy.in +0 -0
  200. {coverage-7.15.0 → coverage-7.15.2}/requirements/pins.pip +0 -0
  201. {coverage-7.15.0 → coverage-7.15.2}/requirements/pip.in +0 -0
  202. {coverage-7.15.0 → coverage-7.15.2}/requirements/pytest.in +0 -0
  203. {coverage-7.15.0 → coverage-7.15.2}/requirements/tox.in +0 -0
  204. {coverage-7.15.0 → coverage-7.15.2}/setup.cfg +0 -0
  205. {coverage-7.15.0 → coverage-7.15.2}/setup.py +0 -0
  206. {coverage-7.15.0 → coverage-7.15.2}/tests/__init__.py +0 -0
  207. {coverage-7.15.0 → coverage-7.15.2}/tests/conftest.py +0 -0
  208. {coverage-7.15.0 → coverage-7.15.2}/tests/coveragetest.py +0 -0
  209. {coverage-7.15.0 → coverage-7.15.2}/tests/covmodzip1.py +0 -0
  210. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/README.rst +0 -0
  211. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/anno_dir/multi.py,cover +0 -0
  212. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475___init__.py,cover +0 -0
  213. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_80084bf2fba02475_a.py,cover +0 -0
  214. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2___init__.py,cover +0 -0
  215. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/anno_dir/z_b039179a8a4ce2c2_b.py,cover +0 -0
  216. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/encodings/utf8.py,cover +0 -0
  217. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/mae/mae.py,cover +0 -0
  218. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/multi/a/__init__.py,cover +0 -0
  219. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/multi/a/a.py,cover +0 -0
  220. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/multi/b/__init__.py,cover +0 -0
  221. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/multi/b/b.py,cover +0 -0
  222. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/multi/multi.py,cover +0 -0
  223. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/annotate/white/white.py,cover +0 -0
  224. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/Makefile +0 -0
  225. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/a/a_py.html +0 -0
  226. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/a/class_index.html +0 -0
  227. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/a/function_index.html +0 -0
  228. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/a/index.html +0 -0
  229. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/b_branch/b_py.html +0 -0
  230. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/b_branch/class_index.html +0 -0
  231. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/b_branch/function_index.html +0 -0
  232. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/b_branch/index.html +0 -0
  233. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/bom/bom_py.html +0 -0
  234. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/bom/class_index.html +0 -0
  235. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/bom/function_index.html +0 -0
  236. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/bom/index.html +0 -0
  237. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/contexts/class_index.html +0 -0
  238. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/contexts/function_index.html +0 -0
  239. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/contexts/index.html +0 -0
  240. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/contexts/two_tests_py.html +0 -0
  241. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/isolatin1/class_index.html +0 -0
  242. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/isolatin1/function_index.html +0 -0
  243. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/isolatin1/index.html +0 -0
  244. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/isolatin1/isolatin1_py.html +0 -0
  245. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/multiline/class_index.html +0 -0
  246. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/multiline/function_index.html +0 -0
  247. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/multiline/index.html +0 -0
  248. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/multiline/multiline_py.html +0 -0
  249. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/class_index.html +0 -0
  250. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/function_index.html +0 -0
  251. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/index.html +0 -0
  252. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/m1_py.html +0 -0
  253. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/m2_py.html +0 -0
  254. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/m3_py.html +0 -0
  255. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_1/main_py.html +0 -0
  256. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/class_index.html +0 -0
  257. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/function_index.html +0 -0
  258. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/index.html +0 -0
  259. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/m2_py.html +0 -0
  260. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/m3_py.html +0 -0
  261. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_2/main_py.html +0 -0
  262. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_3/class_index.html +0 -0
  263. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_3/function_index.html +0 -0
  264. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_3/index.html +0 -0
  265. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_3/m3_py.html +0 -0
  266. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_3/main_py.html +0 -0
  267. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/class_index.html +0 -0
  268. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/function_index.html +0 -0
  269. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/index.html +0 -0
  270. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/m1_py.html +0 -0
  271. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/m3_py.html +0 -0
  272. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_4/main_py.html +0 -0
  273. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_5/class_index.html +0 -0
  274. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_5/function_index.html +0 -0
  275. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_5/index.html +0 -0
  276. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_5/m1_py.html +0 -0
  277. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/omit_5/main_py.html +0 -0
  278. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/other/blah_blah_other_py.html +0 -0
  279. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/other/class_index.html +0 -0
  280. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/other/function_index.html +0 -0
  281. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/other/here_py.html +0 -0
  282. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/other/index.html +0 -0
  283. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/partial/class_index.html +0 -0
  284. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/partial/function_index.html +0 -0
  285. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/partial/index.html +0 -0
  286. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/partial/partial_py.html +0 -0
  287. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/a_py.html +0 -0
  288. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/class_index.html +0 -0
  289. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/function_index.html +0 -0
  290. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/index.html +0 -0
  291. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/myextra.css +0 -0
  292. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/styled/style.css +0 -0
  293. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/support/coverage_html_cb_dd2e7eb5.js +0 -0
  294. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/support/favicon_32_cb_c827f16f.png +0 -0
  295. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/support/keybd_closed_cb_900cfef5.png +0 -0
  296. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/support/style_cb_a90a112a.css +0 -0
  297. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/unicode/class_index.html +0 -0
  298. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/unicode/function_index.html +0 -0
  299. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/unicode/index.html +0 -0
  300. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/html/unicode/unicode_py.html +0 -0
  301. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/testing/getty/gettysburg.txt +0 -0
  302. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/testing/xml/output.xml +0 -0
  303. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/xml/x_xml/coverage.xml +0 -0
  304. {coverage-7.15.0 → coverage-7.15.2}/tests/gold/xml/y_xml_branch/coverage.xml +0 -0
  305. {coverage-7.15.0 → coverage-7.15.2}/tests/goldtest.py +0 -0
  306. {coverage-7.15.0 → coverage-7.15.2}/tests/helpers.py +0 -0
  307. {coverage-7.15.0 → coverage-7.15.2}/tests/js/index.html +0 -0
  308. {coverage-7.15.0 → coverage-7.15.2}/tests/js/tests.js +0 -0
  309. {coverage-7.15.0 → coverage-7.15.2}/tests/mixins.py +0 -0
  310. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/__init__.py +0 -0
  311. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/afile.odd.py +0 -0
  312. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/afile.py +0 -0
  313. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb/__init__.py +0 -0
  314. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb/bfile.odd.py +0 -0
  315. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb/bfile.py +0 -0
  316. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb/cc/__init__.py +0 -0
  317. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb/cc/cfile.py +0 -0
  318. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/bb.odd/bfile.py +0 -0
  319. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/aa/zfile.py +0 -0
  320. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/ambiguous/__init__.py +0 -0
  321. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/ambiguous/pkg1/__init__.py +0 -0
  322. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/ambiguous/pkg1/ambiguous.py +0 -0
  323. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/checkspec.py +0 -0
  324. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/covmod1.py +0 -0
  325. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/namespace_420/sub1/__init__.py +0 -0
  326. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/__init__.py +0 -0
  327. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/__main__.py +0 -0
  328. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/p1a.py +0 -0
  329. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/p1b.py +0 -0
  330. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/p1c.py +0 -0
  331. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/runmod2.py +0 -0
  332. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/sub/__init__.py +0 -0
  333. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/sub/__main__.py +0 -0
  334. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/sub/ps1a.py +0 -0
  335. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg1/sub/runmod3.py +0 -0
  336. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg2/__init__.py +0 -0
  337. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg2/p2a.py +0 -0
  338. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/pkg2/p2b.py +0 -0
  339. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/plugins/__init__.py +0 -0
  340. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/plugins/a_plugin.py +0 -0
  341. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/plugins/another.py +0 -0
  342. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/process_test/__init__.py +0 -0
  343. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/process_test/try_execfile.py +0 -0
  344. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/runmod1.py +0 -0
  345. {coverage-7.15.0 → coverage-7.15.2}/tests/modules/usepkgs.py +0 -0
  346. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/namespace_420/sub2/__init__.py +0 -0
  347. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/__init__.py +0 -0
  348. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/othera.py +0 -0
  349. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/otherb.py +0 -0
  350. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/sub/__init__.py +0 -0
  351. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/sub/osa.py +0 -0
  352. {coverage-7.15.0 → coverage-7.15.2}/tests/moremodules/othermods/sub/osb.py +0 -0
  353. {coverage-7.15.0 → coverage-7.15.2}/tests/osinfo.py +0 -0
  354. {coverage-7.15.0 → coverage-7.15.2}/tests/plugin1.py +0 -0
  355. {coverage-7.15.0 → coverage-7.15.2}/tests/plugin2.py +0 -0
  356. {coverage-7.15.0 → coverage-7.15.2}/tests/plugin_config.py +0 -0
  357. {coverage-7.15.0 → coverage-7.15.2}/tests/qunit/jquery.tmpl.min.js +0 -0
  358. {coverage-7.15.0 → coverage-7.15.2}/tests/select_plugin.py +0 -0
  359. {coverage-7.15.0 → coverage-7.15.2}/tests/strategies.py +0 -0
  360. {coverage-7.15.0 → coverage-7.15.2}/tests/stress_phystoken.tok +0 -0
  361. {coverage-7.15.0 → coverage-7.15.2}/tests/stress_phystoken_dos.tok +0 -0
  362. {coverage-7.15.0 → coverage-7.15.2}/tests/test_annotate.py +0 -0
  363. {coverage-7.15.0 → coverage-7.15.2}/tests/test_api.py +0 -0
  364. {coverage-7.15.0 → coverage-7.15.2}/tests/test_arcs.py +0 -0
  365. {coverage-7.15.0 → coverage-7.15.2}/tests/test_bytecode.py +0 -0
  366. {coverage-7.15.0 → coverage-7.15.2}/tests/test_cmdline.py +0 -0
  367. {coverage-7.15.0 → coverage-7.15.2}/tests/test_collector.py +0 -0
  368. {coverage-7.15.0 → coverage-7.15.2}/tests/test_concurrency.py +0 -0
  369. {coverage-7.15.0 → coverage-7.15.2}/tests/test_config.py +0 -0
  370. {coverage-7.15.0 → coverage-7.15.2}/tests/test_context.py +0 -0
  371. {coverage-7.15.0 → coverage-7.15.2}/tests/test_core.py +0 -0
  372. {coverage-7.15.0 → coverage-7.15.2}/tests/test_coverage.py +0 -0
  373. {coverage-7.15.0 → coverage-7.15.2}/tests/test_data.py +0 -0
  374. {coverage-7.15.0 → coverage-7.15.2}/tests/test_debug.py +0 -0
  375. {coverage-7.15.0 → coverage-7.15.2}/tests/test_execfile.py +0 -0
  376. {coverage-7.15.0 → coverage-7.15.2}/tests/test_filereporter.py +0 -0
  377. {coverage-7.15.0 → coverage-7.15.2}/tests/test_files.py +0 -0
  378. {coverage-7.15.0 → coverage-7.15.2}/tests/test_goldtest.py +0 -0
  379. {coverage-7.15.0 → coverage-7.15.2}/tests/test_json.py +0 -0
  380. {coverage-7.15.0 → coverage-7.15.2}/tests/test_lcov.py +0 -0
  381. {coverage-7.15.0 → coverage-7.15.2}/tests/test_misc.py +0 -0
  382. {coverage-7.15.0 → coverage-7.15.2}/tests/test_mixins.py +0 -0
  383. {coverage-7.15.0 → coverage-7.15.2}/tests/test_numbits.py +0 -0
  384. {coverage-7.15.0 → coverage-7.15.2}/tests/test_oddball.py +0 -0
  385. {coverage-7.15.0 → coverage-7.15.2}/tests/test_phystokens.py +0 -0
  386. {coverage-7.15.0 → coverage-7.15.2}/tests/test_plugins.py +0 -0
  387. {coverage-7.15.0 → coverage-7.15.2}/tests/test_process.py +0 -0
  388. {coverage-7.15.0 → coverage-7.15.2}/tests/test_python.py +0 -0
  389. {coverage-7.15.0 → coverage-7.15.2}/tests/test_regions.py +0 -0
  390. {coverage-7.15.0 → coverage-7.15.2}/tests/test_report.py +0 -0
  391. {coverage-7.15.0 → coverage-7.15.2}/tests/test_report_common.py +0 -0
  392. {coverage-7.15.0 → coverage-7.15.2}/tests/test_report_core.py +0 -0
  393. {coverage-7.15.0 → coverage-7.15.2}/tests/test_results.py +0 -0
  394. {coverage-7.15.0 → coverage-7.15.2}/tests/test_setup.py +0 -0
  395. {coverage-7.15.0 → coverage-7.15.2}/tests/test_sqlitedb.py +0 -0
  396. {coverage-7.15.0 → coverage-7.15.2}/tests/test_templite.py +0 -0
  397. {coverage-7.15.0 → coverage-7.15.2}/tests/test_testing.py +0 -0
  398. {coverage-7.15.0 → coverage-7.15.2}/tests/test_venv.py +0 -0
  399. {coverage-7.15.0 → coverage-7.15.2}/tests/test_version.py +0 -0
  400. {coverage-7.15.0 → coverage-7.15.2}/tests/test_xml.py +0 -0
  401. {coverage-7.15.0 → coverage-7.15.2}/tests/testenv.py +0 -0
  402. {coverage-7.15.0 → coverage-7.15.2}/tests/zipsrc/zip1/__init__.py +0 -0
  403. {coverage-7.15.0 → coverage-7.15.2}/tests/zipsrc/zip1/zip1.py +0 -0
  404. {coverage-7.15.0 → coverage-7.15.2}/tox.ini +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@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
58
+ uses: github/codeql-action/init@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
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@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
69
+ uses: github/codeql-action/autobuild@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
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@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4.36.2
83
+ uses: github/codeql-action/analyze@54f647b7e1bb85c95cddabcd46b0c578ec92bc1a # v4.36.3
@@ -45,7 +45,7 @@ jobs:
45
45
  persist-credentials: false
46
46
 
47
47
  - name: "Examine changed files"
48
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
48
+ uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
49
49
  id: filter
50
50
  with:
51
51
  filters: |
@@ -126,7 +126,7 @@ jobs:
126
126
  persist-credentials: false
127
127
 
128
128
  - name: "Set up Python"
129
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
129
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
130
130
  with:
131
131
  python-version: "${{ matrix.python-version }}"
132
132
  allow-prereleases: true
@@ -187,7 +187,7 @@ jobs:
187
187
  persist-credentials: false
188
188
 
189
189
  - name: "Set up Python"
190
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
190
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
191
191
  with:
192
192
  python-version: "3.10" # Minimum of PYVERSIONS
193
193
  # At a certain point, installing dependencies failed on pypy 3.9 and
@@ -230,6 +230,14 @@ jobs:
230
230
  path: htmlcov
231
231
  include-hidden-files: true
232
232
 
233
+ - name: "Upload other reports"
234
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
235
+ with:
236
+ name: json_xml
237
+ path: |
238
+ coverage.xml
239
+ coverage.json
240
+
233
241
  - name: "Show text report"
234
242
  run: |
235
243
  set -xe
@@ -178,7 +178,7 @@ jobs:
178
178
 
179
179
  - name: "Install Python"
180
180
  if: ${{ matrix.arch != 'ppc64le' }}
181
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
181
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
182
182
  with:
183
183
  python-version: "${{ matrix.cipy }}"
184
184
  cache: pip
@@ -202,7 +202,7 @@ jobs:
202
202
 
203
203
  - name: "Set up QEMU"
204
204
  if: ${{ matrix.arch == 'riscv64' }}
205
- uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
205
+ uses: docker/setup-qemu-action@96fe6ef7f33517b61c61be40b68a1882f3264fb8 # v4.2.0
206
206
 
207
207
  - name: "Build binary wheels"
208
208
  env:
@@ -239,7 +239,7 @@ jobs:
239
239
  persist-credentials: false
240
240
 
241
241
  - name: "Install Python"
242
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
242
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
243
243
  with:
244
244
  python-version: "3.11" # PYVERSIONS: the kit-building version
245
245
  cache: pip
@@ -86,7 +86,7 @@ jobs:
86
86
  files=$(find dist/* 2>/dev/null | wc -l) && [ "$files" -eq "$EXPECTED" ] || exit 1
87
87
 
88
88
  - name: "Generate attestations"
89
- uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
89
+ uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
90
90
  with:
91
91
  subject-path: "dist/*"
92
92
 
@@ -127,7 +127,7 @@ jobs:
127
127
  files=$(find dist/* 2>/dev/null | wc -l) && [ "$files" -eq "$EXPECTED" ] || exit 1
128
128
 
129
129
  - name: "Generate attestations"
130
- uses: actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32 # v4.1.0
130
+ uses: actions/attest-build-provenance@0f67c3f4856b2e3261c31976d6725780e5e4c373 # v4.1.1
131
131
  with:
132
132
  subject-path: "dist/*"
133
133
 
@@ -43,7 +43,7 @@ jobs:
43
43
  persist-credentials: false
44
44
 
45
45
  - name: "Examine changed files"
46
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
46
+ uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
47
47
  id: filter
48
48
  with:
49
49
  filters: |
@@ -79,7 +79,7 @@ jobs:
79
79
  persist-credentials: false
80
80
 
81
81
  - name: "Install Python"
82
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
82
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
83
83
  with:
84
84
  python-version: "3.10" # Minimum of PYVERSIONS
85
85
  cache: pip
@@ -109,7 +109,7 @@ jobs:
109
109
  persist-credentials: false
110
110
 
111
111
  - name: "Install Python"
112
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
112
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
113
113
  with:
114
114
  python-version: "3.10" # Minimum of PYVERSIONS
115
115
  cache: pip
@@ -144,7 +144,7 @@ jobs:
144
144
  git fetch origin main --depth=1
145
145
 
146
146
  - name: "Install Python"
147
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
147
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
148
148
  with:
149
149
  python-version: "3.12" # Doc version from PYVERSIONS
150
150
  cache: pip
@@ -43,7 +43,7 @@ jobs:
43
43
  persist-credentials: false
44
44
 
45
45
  - name: "Examine changed files"
46
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
46
+ uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
47
47
  id: filter
48
48
  with:
49
49
  filters: |
@@ -121,7 +121,7 @@ jobs:
121
121
  persist-credentials: false
122
122
 
123
123
  - name: "Set up Python"
124
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
124
+ uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6.3.0
125
125
  with:
126
126
  python-version: "${{ matrix.python-version }}"
127
127
  allow-prereleases: true
@@ -16,7 +16,7 @@ repos:
16
16
  exclude: "stress_phystoken|\\.py,cover$"
17
17
 
18
18
  - repo: https://github.com/astral-sh/ruff-pre-commit
19
- rev: v0.15.18
19
+ rev: v0.15.20
20
20
  hooks:
21
21
  - id: ruff-format
22
22
 
@@ -22,6 +22,43 @@ upgrading your version of coverage.py.
22
22
 
23
23
  .. start-releases
24
24
 
25
+ .. _changes_7-15-2:
26
+
27
+ Version 7.15.2 — 2026-07-15
28
+ ---------------------------
29
+
30
+ - Fix: one of the performance improvements in 7.15.1 (pull 2215) dramatically
31
+ increased memory use during reporting for large projects. Now we use a
32
+ different approach that is both faster and slimmer than 7.15.0. Fixes `issue
33
+ 2229`_.
34
+
35
+ .. _issue 2229: https://github.com/coveragepy/coveragepy/issues/2229
36
+
37
+
38
+ .. _changes_7-15-1:
39
+
40
+ Version 7.15.1 — 2026-07-12
41
+ ---------------------------
42
+
43
+ - Fix: in the HTML report with ``show_contexts`` enabled, a context label
44
+ containing ``</script>`` (for example a parametrized pytest node id) could
45
+ close the inline ``<script>`` element in a file page early, injecting markup.
46
+ Context labels are now fully escaped. Thanks, `Rajath Mohare <pull 2224_>`_.
47
+
48
+ - A number of performance improvements thanks to Paul Kehrer, in pull requests
49
+ `2213 <pull 2213_>`_, `2214 <pull 2214_>`_, `2215 <pull 2215_>`_, `2216
50
+ <pull 2216_>`_, `2218 <pull 2218_>`_, `2220 <pull 2220_>`_, and `2221 <pull
51
+ 2221_>`_.
52
+
53
+ .. _pull 2213: https://github.com/coveragepy/coveragepy/pull/2213
54
+ .. _pull 2214: https://github.com/coveragepy/coveragepy/pull/2214
55
+ .. _pull 2215: https://github.com/coveragepy/coveragepy/pull/2215
56
+ .. _pull 2216: https://github.com/coveragepy/coveragepy/pull/2216
57
+ .. _pull 2218: https://github.com/coveragepy/coveragepy/pull/2218
58
+ .. _pull 2220: https://github.com/coveragepy/coveragepy/pull/2220
59
+ .. _pull 2221: https://github.com/coveragepy/coveragepy/pull/2221
60
+ .. _pull 2224: https://github.com/coveragepy/coveragepy/pull/2224
61
+
25
62
  .. _changes_7-15-0:
26
63
 
27
64
  Version 7.15.0 — 2026-07-02
@@ -206,12 +206,14 @@ Pablo Carballo
206
206
  Pankaj Pandey
207
207
  Pankhudi Jain
208
208
  Patrick Mezard
209
+ Paul Kehrer
209
210
  Paul Timmins
210
211
  Pavel Tsialnou
211
212
  Peter Baughman
212
213
  Peter Ebden
213
214
  Peter Portante
214
215
  Phebe Polk
216
+ Rajath Mohare
215
217
  Reya B
216
218
  Ricardo Newbery
217
219
  Robert Harris
@@ -1,12 +1,12 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: coverage
3
- Version: 7.15.0
3
+ Version: 7.15.2
4
4
  Summary: Code coverage measurement for Python
5
5
  Home-page: https://github.com/coveragepy/coveragepy
6
- Author: Ned Batchelder and 259 others
6
+ Author: Ned Batchelder and 261 others
7
7
  Author-email: ned@nedbatchelder.com
8
8
  License: Apache-2.0
9
- Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.0
9
+ Project-URL: Documentation, https://coverage.readthedocs.io/en/7.15.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
@@ -83,7 +83,7 @@ Coverage.py runs on these versions of Python:
83
83
  Documentation is on `Read the Docs`_. Code repository and issue tracker are on
84
84
  `GitHub`_.
85
85
 
86
- .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.0/
86
+ .. _Read the Docs: https://coverage.readthedocs.io/en/7.15.2/
87
87
  .. _GitHub: https://github.com/coveragepy/coveragepy
88
88
 
89
89
 
@@ -112,7 +112,7 @@ Getting Started
112
112
  Looking to run ``coverage`` on your test suite? See the `Quick Start section`_
113
113
  of the docs.
114
114
 
115
- .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.0/#quick-start
115
+ .. _Quick Start section: https://coverage.readthedocs.io/en/7.15.2/#quick-start
116
116
 
117
117
 
118
118
  Change history
@@ -120,7 +120,7 @@ Change history
120
120
 
121
121
  The complete history of changes is on the `change history page`_.
122
122
 
123
- .. _change history page: https://coverage.readthedocs.io/en/7.15.0/changes.html
123
+ .. _change history page: https://coverage.readthedocs.io/en/7.15.2/changes.html
124
124
 
125
125
 
126
126
  Code of Conduct
@@ -139,7 +139,7 @@ Contributing
139
139
  Found a bug? Want to help improve the code or documentation? See the
140
140
  `Contributing section`_ of the docs.
141
141
 
142
- .. _Contributing section: https://coverage.readthedocs.io/en/7.15.0/contributing.html
142
+ .. _Contributing section: https://coverage.readthedocs.io/en/7.15.2/contributing.html
143
143
 
144
144
 
145
145
  Security
@@ -167,7 +167,7 @@ Licensed under the `Apache 2.0 License`_. For details, see `NOTICE.txt`_.
167
167
  :target: https://github.com/coveragepy/coveragepy/actions/workflows/quality.yml
168
168
  :alt: Quality check status
169
169
  .. |docs| image:: https://readthedocs.org/projects/coverage/badge/?version=latest&style=flat
170
- :target: https://coverage.readthedocs.io/en/7.15.0/
170
+ :target: https://coverage.readthedocs.io/en/7.15.2/
171
171
  :alt: Documentation
172
172
  .. |kit| image:: https://img.shields.io/pypi/v/coverage
173
173
  :target: https://pypi.org/project/coverage/
@@ -0,0 +1,208 @@
1
+ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2
+ # For details: https://github.com/coveragepy/coveragepy/blob/main/NOTICE.txt
3
+
4
+ """Bytecode analysis for coverage.py"""
5
+
6
+ from __future__ import annotations
7
+
8
+ import dis
9
+ from collections.abc import Iterable, Mapping
10
+ from types import CodeType
11
+
12
+ from coverage.types import TArc, TLineNo, TOffset
13
+
14
+
15
+ class ByteParser:
16
+ """Parse bytecode to understand the structure of code."""
17
+
18
+ def __init__(
19
+ self,
20
+ *,
21
+ code: CodeType | None = None,
22
+ text: str | None = None,
23
+ filename: str | None = None,
24
+ ) -> None:
25
+ if code is None:
26
+ assert text is not None
27
+ code = compile(text, filename or "<string>", "exec", dont_inherit=True)
28
+ self.code = code
29
+
30
+ def _child_parsers(self) -> Iterable[ByteParser]:
31
+ """Iterate over all the code objects nested within this one.
32
+
33
+ The iteration includes `self` as its first value.
34
+
35
+ We skip code objects named `__annotate__` since they are deferred
36
+ annotations that usually are never run. If there are errors in the
37
+ annotations, they will be caught by type checkers or other tools that
38
+ use annotations.
39
+
40
+ """
41
+ return (ByteParser(code=c) for c in self.code_objects() if c.co_name != "__annotate__")
42
+
43
+ def code_objects(self) -> Iterable[CodeType]:
44
+ """Iterate over all the code objects in `code`."""
45
+ stack = [self.code]
46
+ while stack:
47
+ # We're going to return the code object on the stack, but first
48
+ # push its children for later returning.
49
+ code = stack.pop()
50
+ for c in code.co_consts:
51
+ if isinstance(c, CodeType):
52
+ stack.append(c)
53
+ yield code
54
+
55
+ def _line_numbers(self) -> Iterable[TLineNo]:
56
+ """Yield the line numbers possible in this code object.
57
+
58
+ Uses co_lines() to produce a sequence: l0, l1, ...
59
+ """
60
+ for _, _, line in self.code.co_lines():
61
+ if line:
62
+ yield line
63
+
64
+ def find_statements(self) -> Iterable[TLineNo]:
65
+ """Find the statements in `self.code`.
66
+
67
+ Produce a sequence of line numbers that start statements. Recurses
68
+ into all code objects reachable from `self.code`.
69
+
70
+ """
71
+ for bp in self._child_parsers():
72
+ # Get all of the lineno information from this code.
73
+ yield from bp._line_numbers()
74
+
75
+
76
+ def bytes_to_lines(code: CodeType) -> dict[TOffset, TLineNo]:
77
+ """Make a dict mapping byte code offsets to line numbers."""
78
+ b2l = {}
79
+ for bstart, bend, lineno in code.co_lines():
80
+ if lineno is not None:
81
+ for boffset in range(bstart, bend, 2):
82
+ b2l[boffset] = lineno
83
+ return b2l
84
+
85
+
86
+ def op_set(*op_names: str) -> set[int]:
87
+ """Make a set of opcodes from instruction names.
88
+
89
+ The names might not exist in this version of Python, skip those if not.
90
+ """
91
+ ops = {op for name in op_names if (op := dis.opmap.get(name))}
92
+ assert ops, f"At least one opcode must exist: {op_names}"
93
+ return ops
94
+
95
+
96
+ # Opcodes that are unconditional jumps elsewhere.
97
+ ALWAYS_JUMPS = op_set(
98
+ "JUMP_BACKWARD",
99
+ "JUMP_BACKWARD_NO_INTERRUPT",
100
+ "JUMP_FORWARD",
101
+ )
102
+
103
+ # Opcodes that exit from a function.
104
+ RETURNS = op_set(
105
+ "RETURN_VALUE",
106
+ "RETURN_GENERATOR",
107
+ )
108
+
109
+
110
+ # CACHE doesn't exist in Python 3.10, but the branch resolver is only used
111
+ # on 3.14+, so a placeholder value is fine.
112
+ _CACHE = dis.opmap.get("CACHE", -1)
113
+ _EXTENDED_ARG = dis.opmap["EXTENDED_ARG"]
114
+
115
+ # All opcodes with a jump target.
116
+ JUMPS = set(dis.hasjrel) | set(dis.hasjabs)
117
+
118
+ # Opcodes that jump backwards.
119
+ BACKWARD_JUMPS = {op for op in JUMPS if "JUMP_BACKWARD" in dis.opname[op]}
120
+
121
+
122
+ class BranchArcResolver:
123
+ """Resolve branch events to line arcs, one (source, dest) pair at a time.
124
+
125
+ Branch events are one-shot (they are DISABLEd after firing), so each
126
+ (source offset, destination offset) pair is resolved at most a couple of
127
+ times per code object. Resolving pairs on demand is much cheaper than
128
+ precomputing trails for every branch in the code object, most of which
129
+ never fire. We walk the raw bytecode bytes so that we never need to
130
+ disassemble whole code objects with `dis`.
131
+
132
+ To resolve one pair:
133
+ starting from the destination, follow the trail of instructions (through
134
+ unconditional jumps) until we reach an instruction on a new source line
135
+ (giving us the arc), a return (an arc to leaving the code object), or
136
+ another branch possibility (no arc: that branch will produce its own
137
+ events).
138
+
139
+ """
140
+
141
+ def __init__(
142
+ self,
143
+ code: CodeType,
144
+ byte_to_line: Mapping[TOffset, TLineNo],
145
+ multiline_map: Mapping[TLineNo, TLineNo],
146
+ ) -> None:
147
+ self.code = code
148
+ # co_code re-copies the bytes on each access, so fetch it once.
149
+ self.co_code = code.co_code
150
+ self.byte_to_line = byte_to_line
151
+ self.multiline_map = multiline_map
152
+
153
+ def line_at(self, offset: TOffset) -> TLineNo | None:
154
+ """The source line of the instruction at `offset`, de-multilined."""
155
+ line = self.byte_to_line.get(offset)
156
+ if line is not None:
157
+ line = self.multiline_map.get(line, line)
158
+ return line
159
+
160
+ def resolve(self, source: TOffset, dest: TOffset) -> TArc | None:
161
+ """Turn a branch event's (source, dest) offsets into an arc, or None."""
162
+ from_line = self.line_at(source)
163
+ if from_line is None:
164
+ return None
165
+ co_code = self.co_code
166
+ max_offset = len(co_code)
167
+ byte_to_line = self.byte_to_line
168
+ multiline_map = self.multiline_map
169
+ offset = dest
170
+ ext_arg = 0
171
+ seen: set[TOffset] = set()
172
+ while 0 <= offset < max_offset and offset not in seen:
173
+ seen.add(offset)
174
+ op = co_code[offset]
175
+ if op == _CACHE:
176
+ offset += 2
177
+ continue
178
+ if op == _EXTENDED_ARG:
179
+ ext_arg = (ext_arg | co_code[offset + 1]) << 8
180
+ offset += 2
181
+ continue
182
+ line = byte_to_line.get(offset)
183
+ if line is not None:
184
+ line = multiline_map.get(line, line)
185
+ if line and line != from_line:
186
+ return (from_line, line)
187
+ if op in JUMPS:
188
+ if op in ALWAYS_JUMPS:
189
+ arg = ext_arg | co_code[offset + 1]
190
+ # Jump distances are measured from the end of the
191
+ # instruction's inline CACHE entries, which appear in
192
+ # co_code as CACHE opcodes immediately following it.
193
+ next_offset = offset + 2
194
+ while next_offset < max_offset and co_code[next_offset] == _CACHE:
195
+ next_offset += 2
196
+ if op in BACKWARD_JUMPS:
197
+ offset = next_offset - 2 * arg
198
+ else:
199
+ offset = next_offset + 2 * arg
200
+ ext_arg = 0
201
+ continue
202
+ # Another branch possibility: it will get its own events.
203
+ return None
204
+ if op in RETURNS:
205
+ return (from_line, -self.code.co_firstlineno)
206
+ ext_arg = 0
207
+ offset += 2
208
+ return None
@@ -9,7 +9,6 @@ import atexit
9
9
  import collections
10
10
  import contextlib
11
11
  import datetime
12
- import functools
13
12
  import os
14
13
  import os.path
15
14
  import signal
@@ -999,16 +998,17 @@ class Coverage(TConfigurable):
999
998
  analysis.missing_formatted(),
1000
999
  )
1001
1000
 
1002
- @functools.lru_cache(maxsize=1)
1003
- def _analyze(self, morf: TMorf) -> Analysis:
1001
+ def _analyze(self, morf: TMorf, file_reporter: FileReporter | None = None) -> Analysis:
1004
1002
  """Analyze a module or file. Private for now."""
1005
1003
  self._init()
1006
1004
  self._post_init()
1007
1005
 
1008
1006
  data = self.get_data()
1009
- file_reporter = self._get_file_reporter(morf)
1007
+ if file_reporter is None:
1008
+ file_reporter = self._get_file_reporter(morf)
1010
1009
  filename = self._file_mapper(file_reporter.filename)
1011
- return analysis_from_file_reporter(data, self.config.precision, file_reporter, filename)
1010
+ analysis = analysis_from_file_reporter(data, self.config.precision, file_reporter, filename)
1011
+ return analysis
1012
1012
 
1013
1013
  def branch_stats(self, morf: TMorf) -> dict[TLineNo, tuple[int, int]]:
1014
1014
  """Get branch statistics about a module.
@@ -1024,7 +1024,6 @@ class Coverage(TConfigurable):
1024
1024
  analysis = self._analyze(morf)
1025
1025
  return analysis.branch_stats()
1026
1026
 
1027
- @functools.lru_cache(maxsize=1)
1028
1027
  def _get_file_reporter(self, morf: TMorf) -> FileReporter:
1029
1028
  """Get a FileReporter for a module or file name."""
1030
1029
  assert self._data is not None
@@ -1075,7 +1074,6 @@ class Coverage(TConfigurable):
1075
1074
  if not isinstance(morfs, (list, tuple, set)):
1076
1075
  morfs = [morfs] # type: ignore[list-item]
1077
1076
 
1078
- morfs = sorted(morfs, key=lambda m: m if isinstance(m, str) else m.__name__)
1079
1077
  return [(self._get_file_reporter(morf), morf) for morf in morfs]
1080
1078
 
1081
1079
  def _prepare_data_for_reporting(self) -> None:
@@ -483,9 +483,18 @@ class HtmlReporter:
483
483
  contexts = collections.Counter(c for cline in file_data.lines for c in cline.contexts)
484
484
  context_codes = {y: i for (i, y) in enumerate(x[0] for x in contexts.most_common())}
485
485
  if context_codes:
486
- contexts_json = json.dumps(
487
- {encode_int(v): k for (k, v) in context_codes.items()},
488
- indent=2,
486
+ # This JSON is dropped straight into an inline <script> element, so
487
+ # the HTML-significant characters have to be escaped as \uXXXX to keep
488
+ # a context label like "</script>" from closing the element early.
489
+ # The escapes are still valid JSON, so the parsed values are unchanged.
490
+ contexts_json = (
491
+ json.dumps(
492
+ {encode_int(v): k for (k, v) in context_codes.items()},
493
+ indent=2,
494
+ )
495
+ .replace("<", r"\u003c")
496
+ .replace(">", r"\u003e")
497
+ .replace("&", r"\u0026")
489
498
  )
490
499
  else:
491
500
  contexts_json = None