cpp-linter 1.11.4__tar.gz → 1.12.0__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 (144) hide show
  1. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/analyze-workflows.yml +2 -2
  2. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/labeler.yml +1 -1
  3. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/release-drafter.yml +1 -1
  4. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/release.yml +5 -5
  5. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/tests.yml +10 -10
  6. cpp_linter-1.12.0/.github/zizmor.yml +8 -0
  7. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.pre-commit-config.yaml +3 -3
  8. {cpp_linter-1.11.4/cpp_linter.egg-info → cpp_linter-1.12.0}/PKG-INFO +1 -1
  9. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/__init__.py +4 -0
  10. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/_version.py +3 -3
  11. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/cli.py +27 -1
  12. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/git/__init__.py +30 -12
  13. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/rest_api/__init__.py +17 -1
  14. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/rest_api/github_api.py +6 -2
  15. {cpp_linter-1.11.4 → cpp_linter-1.12.0/cpp_linter.egg-info}/PKG-INFO +1 -1
  16. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/SOURCES.txt +1 -0
  17. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cspell.config.yml +3 -0
  18. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/conf.py +1 -0
  19. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/test_tools_output.py +42 -2
  20. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_cli_args.py +11 -3
  21. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/uv.lock +11 -10
  22. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.gitattributes +0 -0
  23. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/FUNDING.yml +0 -0
  24. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/dependabot.yml +0 -0
  25. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/release-drafter.yml +0 -0
  26. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/codeql.yml +0 -0
  27. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/docs.yml +0 -0
  28. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/pre-commit.yml +0 -0
  29. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.github/workflows/stale.yml +0 -0
  30. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.gitignore +0 -0
  31. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/.readthedocs.yaml +0 -0
  32. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/CONTRIBUTING.rst +0 -0
  33. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/LICENSE +0 -0
  34. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/README.rst +0 -0
  35. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/codecov.yml +0 -0
  36. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/clang_tools/__init__.py +0 -0
  37. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/clang_tools/clang_format.py +0 -0
  38. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/clang_tools/clang_tidy.py +0 -0
  39. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/clang_tools/patcher.py +0 -0
  40. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/common_fs/__init__.py +0 -0
  41. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/common_fs/file_filter.py +0 -0
  42. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/git/git_str.py +0 -0
  43. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter/loggers.py +0 -0
  44. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/dependency_links.txt +0 -0
  45. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/entry_points.txt +0 -0
  46. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/not-zip-safe +0 -0
  47. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/requires.txt +0 -0
  48. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/cpp_linter.egg-info/top_level.txt +0 -0
  49. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.clang_tools.clang_format.rst +0 -0
  50. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.clang_tools.clang_tidy.rst +0 -0
  51. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.clang_tools.patcher.rst +0 -0
  52. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.clang_tools.rst +0 -0
  53. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.cli.rst +0 -0
  54. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.common_fs.file_filter.rst +0 -0
  55. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.common_fs.rst +0 -0
  56. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.git.git_str.rst +0 -0
  57. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.git.rst +0 -0
  58. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.loggers.rst +0 -0
  59. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.rest_api.github_api.rst +0 -0
  60. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.rest_api.rst +0 -0
  61. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/API-Reference/cpp_linter.rst +0 -0
  62. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/_static/extra_css.css +0 -0
  63. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/_static/favicon.ico +0 -0
  64. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/_static/logo.png +0 -0
  65. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/building_docs.rst +0 -0
  66. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/contributing.rst +0 -0
  67. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/index.rst +0 -0
  68. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/permissions.rst +0 -0
  69. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/docs/pr_review_caveats.rst +0 -0
  70. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/noxfile.py +0 -0
  71. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/pyproject.toml +0 -0
  72. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/setup.cfg +0 -0
  73. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/setup.py +0 -0
  74. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/.clang-format +0 -0
  75. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/.clang-tidy +0 -0
  76. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/opl/opl.c +0 -0
  77. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/opl/opl_sdl.c +0 -0
  78. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/pcsound/pcsound.c +0 -0
  79. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/pcsound/pcsound_sdl.c +0 -0
  80. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/src/i_musicpack.c +0 -0
  81. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/src/i_sdlmusic.c +0 -0
  82. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/src/i_sdlsound.c +0 -0
  83. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/src/i_sound.c +0 -0
  84. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/cache/src/net_sdl.c +0 -0
  85. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/expected-result_0.json +0 -0
  86. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/expected-result_1.json +0 -0
  87. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/expected-result_2.json +0 -0
  88. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/67715d6e2725322e6132e9ff99b9a2a3f3b10c83/patch.diff +0 -0
  89. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/cache/src/hexen/info.c +0 -0
  90. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/cache/src/hexen/p_enemy.c +0 -0
  91. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/cache/src/hexen/p_local.h +0 -0
  92. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/expected-result_0.json +0 -0
  93. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/expected-result_1.json +0 -0
  94. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/expected-result_2.json +0 -0
  95. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/chocolate-doom/chocolate-doom/71091562db5b0e7853d08ffa2f110af49cc3bc0d/patch.diff +0 -0
  96. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/cpp-linter/cpp-linter/950ff0b690e1903797c303c5fc8d9f3b52f1d3c5/cache/tests/demo/demo.cpp +0 -0
  97. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/cpp-linter/cpp-linter/950ff0b690e1903797c303c5fc8d9f3b52f1d3c5/cache/tests/demo/demo.hpp +0 -0
  98. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/cpp-linter/cpp-linter/950ff0b690e1903797c303c5fc8d9f3b52f1d3c5/patch.diff +0 -0
  99. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/cpp-linter/cpp-linter/test_git_lib.patch +0 -0
  100. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/.clang-format +0 -0
  101. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/.clang-tidy +0 -0
  102. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/fe82be345a5b654a76835a7aea5a804bd9ebff0a/expected-result_0.json +0 -0
  103. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/fe82be345a5b654a76835a7aea5a804bd9ebff0a/expected-result_1.json +0 -0
  104. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/fe82be345a5b654a76835a7aea5a804bd9ebff0a/expected-result_2.json +0 -0
  105. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/libvips/libvips/fe82be345a5b654a76835a7aea5a804bd9ebff0a/patch.diff +0 -0
  106. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/.clang-format +0 -0
  107. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/.clang-tidy +0 -0
  108. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/662ad4cf90084063ea9c089b8de4aff0b8959d0e/cache/p_enemy.c +0 -0
  109. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/662ad4cf90084063ea9c089b8de4aff0b8959d0e/expected-result_0.json +0 -0
  110. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/662ad4cf90084063ea9c089b8de4aff0b8959d0e/expected-result_1.json +0 -0
  111. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/662ad4cf90084063ea9c089b8de4aff0b8959d0e/expected-result_2.json +0 -0
  112. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/shenxianpeng/test-repo/662ad4cf90084063ea9c089b8de4aff0b8959d0e/patch.diff +0 -0
  113. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/capture_tools_output/test_database_path.py +0 -0
  114. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/pr_22.json +0 -0
  115. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/pr_comments_pg1.json +0 -0
  116. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/pr_comments_pg2.json +0 -0
  117. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/push_8d68756375e0483c7ac2b4d6bbbece420dbbb495.json +0 -0
  118. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/push_comments_8d68756375e0483c7ac2b4d6bbbece420dbbb495.json +0 -0
  119. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/comments/test_comments.py +0 -0
  120. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/demo/.clang-format +0 -0
  121. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/demo/.clang-tidy +0 -0
  122. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/demo/compile_flags.txt +0 -0
  123. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/demo/demo.cpp +0 -0
  124. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/demo/demo.hpp +0 -0
  125. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/ignored_paths/.gitmodules +0 -0
  126. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/ignored_paths/test_ignored_paths.py +0 -0
  127. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/patch.diff +0 -0
  128. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/pull_request_files_pg1.json +0 -0
  129. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/pull_request_files_pg2.json +0 -0
  130. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/push_files_pg1.json +0 -0
  131. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/push_files_pg2.json +0 -0
  132. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/list_changes/test_get_file_changes.py +0 -0
  133. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/.clang-format +0 -0
  134. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/.clang-tidy +0 -0
  135. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/pr_27.diff +0 -0
  136. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/pr_27.json +0 -0
  137. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/pr_review_comments.json +0 -0
  138. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/pr_reviews.json +0 -0
  139. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/reviews/test_pr_review.py +0 -0
  140. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_comment_length.py +0 -0
  141. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_git_str.py +0 -0
  142. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_misc.py +0 -0
  143. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_parse_clang_tidy_stdout.py +0 -0
  144. {cpp_linter-1.11.4 → cpp_linter-1.12.0}/tests/test_rate_limits.py +0 -0
@@ -12,11 +12,11 @@ jobs:
12
12
  analyze-ci:
13
13
  runs-on: ubuntu-latest
14
14
  steps:
15
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
15
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
16
16
  with:
17
17
  persist-credentials: false
18
18
  - name: Set up Python
19
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
19
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
20
20
  with:
21
21
  python-version: '3.x'
22
22
  - name: Run zizmor
@@ -12,6 +12,6 @@ jobs:
12
12
  contents: read
13
13
  pull-requests: write
14
14
  steps:
15
- - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
15
+ - uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 # v6.2.0
16
16
  env:
17
17
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -16,6 +16,6 @@ jobs:
16
16
  contents: write
17
17
  pull-requests: read
18
18
  steps:
19
- - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0
19
+ - uses: release-drafter/release-drafter@6db134d15f3909ccc9eefd369f02bd1e9cffdf97 # v6.2.0
20
20
  env:
21
21
  GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -20,19 +20,19 @@ jobs:
20
20
  build:
21
21
  runs-on: ubuntu-latest
22
22
  steps:
23
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
23
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
24
24
  # use fetch --all for setuptools_scm to work
25
25
  with:
26
26
  fetch-depth: 0
27
27
  persist-credentials: false
28
28
  - name: Set up Python
29
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
29
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
30
30
  with:
31
31
  python-version: '3.x'
32
32
  - name: Build distributions
33
33
  run: pipx run build -o dist
34
34
  - name: Upload builds as artifacts
35
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
35
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
36
36
  with:
37
37
  path: dist
38
38
  name: wheels
@@ -45,13 +45,13 @@ jobs:
45
45
  id-token: write
46
46
  steps:
47
47
  - name: Download distributions
48
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
48
+ uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
49
49
  with:
50
50
  name: wheels
51
51
  path: dist
52
52
  - name: Set up Python
53
53
  if: ${{ !startsWith(github.ref, 'refs/tags/') }}
54
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
54
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
55
55
  with:
56
56
  python-version: '3.x'
57
57
  - name: Check distributions
@@ -36,11 +36,11 @@ jobs:
36
36
 
37
37
  runs-on: ${{ matrix.os }}
38
38
  steps:
39
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
39
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
40
40
  with:
41
41
  persist-credentials: false
42
42
 
43
- - uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
43
+ - uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
44
44
  with:
45
45
  python-version: 3.x
46
46
 
@@ -60,7 +60,7 @@ jobs:
60
60
  # sudo cmake --install build
61
61
 
62
62
  - name: Install uv
63
- uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
63
+ uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
64
64
  with:
65
65
  enable-cache: true
66
66
  cache-dependency-glob: "uv.lock"
@@ -112,7 +112,7 @@ jobs:
112
112
  run: uvx nox -s test-all -- -m "${PYTEST_ARGS}"
113
113
 
114
114
  - name: Upload coverage data
115
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
115
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
116
116
  with:
117
117
  name: coverage-data-${{ runner.os }}-${{ matrix.version }}
118
118
  path: .coverage*
@@ -122,23 +122,23 @@ jobs:
122
122
  needs: [test]
123
123
  runs-on: ubuntu-latest
124
124
  steps:
125
- - uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0
125
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
126
126
  with:
127
127
  persist-credentials: false
128
128
 
129
129
  - name: Download all artifacts
130
- uses: actions/download-artifact@018cc2cf5baa6db3ef3c5f8a56943fffe632ef53 # v6.0.0
130
+ uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
131
131
  with:
132
132
  pattern: coverage-data-*
133
133
  merge-multiple: true
134
134
 
135
135
  - name: Setup python
136
- uses: actions/setup-python@83679a892e2d95755f2dac6acb0bfd1e9ac5d548 # v6.1.0
136
+ uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
137
137
  with:
138
138
  python-version: '3.x'
139
139
 
140
140
  - name: Install uv
141
- uses: astral-sh/setup-uv@1e862dfacbd1d6d858c55d9b792c756523627244 # v7.1.4
141
+ uses: astral-sh/setup-uv@803947b9bd8e9f986429fa0c5a41c367cd732b41 # v7.2.1
142
142
  with:
143
143
  enable-cache: true
144
144
  cache-dependency-glob: "uv.lock"
@@ -147,12 +147,12 @@ jobs:
147
147
  run: uvx nox -s coverage
148
148
 
149
149
  - name: Upload comprehensive coverage HTML report
150
- uses: actions/upload-artifact@330a01c490aca151604b8cf639adc76d48f6c5d4 # v5.0.0
150
+ uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
151
151
  with:
152
152
  name: coverage-report
153
153
  path: htmlcov/
154
154
 
155
- - uses: codecov/codecov-action@5a1091511ad55cbe89839c7260b706298ca349f7 # v5.5.1
155
+ - uses: codecov/codecov-action@671740ac38dd9b0130fbe1cec585b89eea48d3de # v5.5.2
156
156
  env:
157
157
  CODECOV_TOKEN: ${{secrets.CODECOV_TOKEN}}
158
158
  with:
@@ -0,0 +1,8 @@
1
+ rules:
2
+ unpinned-uses:
3
+ config:
4
+ policies:
5
+ actions/*: ref-pin
6
+ github/*: ref-pin
7
+ dependabot/*: ref-pin
8
+ cpp-linter/*: any
@@ -20,14 +20,14 @@ repos:
20
20
  args: ["--fix=lf"]
21
21
  - repo: https://github.com/astral-sh/ruff-pre-commit
22
22
  # Ruff version.
23
- rev: v0.13.3
23
+ rev: v0.14.10
24
24
  hooks:
25
25
  # Run the linter.
26
26
  - id: ruff-check
27
27
  # Run the formatter.
28
28
  - id: ruff-format
29
29
  - repo: https://github.com/pre-commit/mirrors-mypy
30
- rev: 'v1.18.2'
30
+ rev: 'v1.19.1'
31
31
  hooks:
32
32
  - id: mypy
33
33
  additional_dependencies:
@@ -38,6 +38,6 @@ repos:
38
38
  - requests-mock
39
39
  - '.'
40
40
  - repo: https://github.com/streetsidesoftware/cspell-cli
41
- rev: v9.2.0
41
+ rev: v9.4.0
42
42
  hooks:
43
43
  - id: cspell
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cpp-linter
3
- Version: 1.11.4
3
+ Version: 1.12.0
4
4
  Summary: Run clang-format and clang-tidy on a batch of files.
5
5
  Author-email: Brendan Doherty <2bndy5@gmail.com>, Xianpeng Shen <xianpeng.shen@gmail.com>
6
6
  License-Expression: MIT
@@ -50,6 +50,8 @@ def main():
50
50
  files = rest_api_client.get_list_of_changed_files(
51
51
  file_filter=global_file_filter,
52
52
  lines_changed_only=args.lines_changed_only,
53
+ diff_base=args.diff_base,
54
+ ignore_index=args.ignore_index,
53
55
  )
54
56
  rest_api_client.verify_files_are_present(files)
55
57
  else:
@@ -61,6 +63,8 @@ def main():
61
63
  git_changes = rest_api_client.get_list_of_changed_files(
62
64
  file_filter=global_file_filter,
63
65
  lines_changed_only=0, # prevent filtering out unchanged files
66
+ diff_base=args.diff_base,
67
+ ignore_index=args.ignore_index,
64
68
  )
65
69
  # merge info from git changes into list of all files
66
70
  for git_file in git_changes:
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '1.11.4'
32
- __version_tuple__ = version_tuple = (1, 11, 4)
31
+ __version__ = version = '1.12.0'
32
+ __version_tuple__ = version_tuple = (1, 12, 0)
33
33
 
34
- __commit_id__ = commit_id = 'ga846191b3'
34
+ __commit_id__ = commit_id = 'gb3c28b66d'
@@ -2,7 +2,7 @@
2
2
 
3
3
  import argparse
4
4
  from collections import UserDict
5
- from typing import Optional, List, Dict, Any, Sequence
5
+ from typing import Optional, List, Dict, Any, Sequence, Union
6
6
 
7
7
 
8
8
  class Args(UserDict):
@@ -13,6 +13,10 @@ class Args(UserDict):
13
13
  verbosity: bool = False
14
14
  #: See :std:option:`--database`.
15
15
  database: str = ""
16
+ #: See :std:option:`--diff-base`.
17
+ diff_base: Optional[Union[int, str]] = None
18
+ #: See :std:option:`--ignore-index`.
19
+ ignore_index: bool = False
16
20
  #: See :std:option:`--style`.
17
21
  style: str = "llvm"
18
22
  #: See :std:option:`--tidy-checks`.
@@ -108,6 +112,28 @@ tree.
108
112
  path. Otherwise, cpp-linter will have difficulty
109
113
  parsing clang-tidy output.""",
110
114
  )
115
+ _parser_args[("-b", "--diff-base")] = dict(
116
+ default=None,
117
+ type=lambda input: int(input) if input.isdigit() else str(input),
118
+ help="""The specific commit or git revision to use
119
+ as the base for any git diffs. For example, may be ``HEAD~5``
120
+ for the last five commits, or a branch name for the history
121
+ diff since the common ancestor. If given as an integer, n, it
122
+ will be treated as ``HEAD~n``. When not set, diff behavior
123
+ depends on the presence of staged files. This option only
124
+ applies to contexts in which GitHub CI is not present/used.
125
+
126
+ Defaults to ``%(default)s``""",
127
+ )
128
+ _parser_args[("--ignore-index",)] = dict(
129
+ default=False,
130
+ action="store_true",
131
+ help="""Enabling this switch will ignore
132
+ any staged files in the index when producing a diff.
133
+ Useful when used with :std:option:`--diff-base`.
134
+
135
+ Defaults to ``%(default)s``""",
136
+ )
111
137
  _parser_args[("-s", "--style")] = dict(
112
138
  default="llvm",
113
139
  help="""The style rules to use.
@@ -26,8 +26,8 @@ from ..loggers import logger
26
26
  from .git_str import parse_diff as legacy_parse_diff
27
27
 
28
28
 
29
- def get_sha(repo: Repository, parent: Optional[int] = None) -> GitObject:
30
- """Uses ``git`` to fetch the full SHA hash of the current commit.
29
+ def get_sha(repo: Repository, parent: Optional[Union[int, str]] = None) -> GitObject:
30
+ """Uses ``git`` to fetch the full SHA hash of a commit.
31
31
 
32
32
  .. note::
33
33
  This function is only used in local development environments, not in a
@@ -36,10 +36,15 @@ def get_sha(repo: Repository, parent: Optional[int] = None) -> GitObject:
36
36
  :param repo: The object representing the git repository.
37
37
  :param parent: This parameter's default value will fetch the SHA of the last commit.
38
38
  Set this parameter to the number of parent commits from the current tree's HEAD
39
- to get the desired commit's SHA hash instead.
40
- :returns: A `str` representing the commit's SHA hash.
39
+ or a valid git revision to get the desired commit's SHA hash instead.
40
+ :returns: A `pygit2.Object` representing the resolved commit.
41
41
  """
42
- return repo.revparse_single("HEAD" + (f"~{parent}" if parent is not None else ""))
42
+ head = "HEAD"
43
+ if isinstance(parent, str):
44
+ head = parent
45
+ if isinstance(parent, int):
46
+ head += f"~{parent}"
47
+ return repo.revparse_single(head)
43
48
 
44
49
 
45
50
  STAGED_STATUS = (
@@ -49,11 +54,18 @@ STAGED_STATUS = (
49
54
  )
50
55
 
51
56
 
52
- def get_diff(parents: int = 1) -> Diff:
57
+ def get_diff(
58
+ parents: Optional[Union[int, str]] = None, ignore_index: bool = False
59
+ ) -> Diff:
53
60
  """Retrieve the diff info about a specified commit.
54
61
 
55
- :param parents: The number of parent commits related to the current commit.
56
- :returns: A `str` of the fetched diff.
62
+ :param parents: The commit or ref to use as the base of the diff.
63
+ If set to None, and there are staged changes to be used, then it will be HEAD and
64
+ the diff will consist of just the staged changes. If there are no staged changes or
65
+ the index is ignored, it will be HEAD~1.
66
+ :param ignore_index: Setting this flag to ``true`` will ignore any staged files
67
+ in the index when producing a diff.
68
+ :returns: A `pygit2.Diff` object representing the fetched diff.
57
69
  """
58
70
  repo = Repository(".")
59
71
  head = get_sha(repo)
@@ -64,12 +76,18 @@ def get_diff(parents: int = 1) -> Diff:
64
76
  has_staged_files = True
65
77
  break
66
78
 
67
- if has_staged_files:
79
+ use_index = not ignore_index and has_staged_files
80
+
81
+ if not use_index and parents is None:
82
+ parents = 1
83
+
84
+ base = get_sha(repo, parents)
85
+
86
+ if use_index:
68
87
  index = repo.index
69
- diff_obj = index.diff_to_tree(cast(Commit, head).tree)
70
- diff_name = f"HEAD...{head.short_id}"
88
+ diff_obj = index.diff_to_tree(cast(Commit, base).tree)
89
+ diff_name = f"HEAD...{base.short_id}"
71
90
  else:
72
- base = get_sha(repo, parents) # only concerned with latest commit's diff
73
91
  diff_obj = repo.diff(base, head)
74
92
  diff_name = f"{head.short_id}...{base.short_id}"
75
93
 
@@ -6,7 +6,7 @@ from abc import ABC
6
6
  from pathlib import PurePath
7
7
  import sys
8
8
  import time
9
- from typing import Optional, Dict, List, Any, cast, NamedTuple
9
+ from typing import Optional, Dict, List, Any, cast, NamedTuple, Union
10
10
  import requests
11
11
  from ..common_fs import FileObj
12
12
  from ..common_fs.file_filter import FileFilter
@@ -161,11 +161,27 @@ class RestApiClient(ABC):
161
161
  self,
162
162
  file_filter: FileFilter,
163
163
  lines_changed_only: int,
164
+ diff_base: Optional[Union[int, str]] = None,
165
+ ignore_index: bool = False,
164
166
  ) -> List[FileObj]:
165
167
  """Fetch a list of the event's changed files.
166
168
 
167
169
  :param file_filter: A `FileFilter` obj to filter files.
168
170
  :param lines_changed_only: A value that dictates what file changes to focus on.
171
+ :param diff_base: The commit or ref to use as the base of the diff.
172
+
173
+ .. csv-table::
174
+ :header-rows: 1
175
+
176
+ "Parameter Value", "Git index state", "Scope of diff"
177
+ "`None` (the default)", "No staged changes", "``HEAD~1..HEAD``"
178
+ "`None` (the default)", "Has staged changes", "``HEAD..index``"
179
+ "`int` (eg ``2``) or `str` (eg ``HEAD~2``)", "No staged changes", "``HEAD~2..HEAD``"
180
+ "`int` (eg ``2``) or `str` (eg ``HEAD~2``)", "Has staged changes", "``HEAD~2..index``"
181
+
182
+ Use ``ignore_index`` parameter to exclude the staged changes in the local index.
183
+ :param ignore_index: Setting this flag to `True` will ignore any staged changes
184
+ in the index when producing a diff.
169
185
  """
170
186
  raise NotImplementedError("must be implemented in the derivative")
171
187
 
@@ -15,7 +15,7 @@ from os import environ
15
15
  from pathlib import Path
16
16
  import urllib.parse
17
17
  import sys
18
- from typing import Dict, List, Any, cast, Optional
18
+ from typing import Dict, List, Any, cast, Optional, Union
19
19
 
20
20
  from ..common_fs import FileObj, CACHE_PATH
21
21
  from ..common_fs.file_filter import FileFilter
@@ -92,6 +92,8 @@ class GithubApiClient(RestApiClient):
92
92
  self,
93
93
  file_filter: FileFilter,
94
94
  lines_changed_only: int,
95
+ diff_base: Optional[Union[int, str]] = None,
96
+ ignore_index: bool = False,
95
97
  ) -> List[FileObj]:
96
98
  if environ.get("CI", "false") == "true":
97
99
  files_link = f"{self.api_url}/repos/{self.repo}/"
@@ -114,7 +116,9 @@ class GithubApiClient(RestApiClient):
114
116
  files_link, lines_changed_only, file_filter
115
117
  )
116
118
  return parse_diff(response.text, file_filter, lines_changed_only)
117
- return parse_diff(get_diff(), file_filter, lines_changed_only)
119
+ return parse_diff(
120
+ get_diff(diff_base, ignore_index), file_filter, lines_changed_only
121
+ )
118
122
 
119
123
  def _get_changed_files_paginated(
120
124
  self, url: Optional[str], lines_changed_only: int, file_filter: FileFilter
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cpp-linter
3
- Version: 1.11.4
3
+ Version: 1.12.0
4
4
  Summary: Run clang-format and clang-tidy on a batch of files.
5
5
  Author-email: Brendan Doherty <2bndy5@gmail.com>, Xianpeng Shen <xianpeng.shen@gmail.com>
6
6
  License-Expression: MIT
@@ -14,6 +14,7 @@ uv.lock
14
14
  .github/FUNDING.yml
15
15
  .github/dependabot.yml
16
16
  .github/release-drafter.yml
17
+ .github/zizmor.yml
17
18
  .github/workflows/analyze-workflows.yml
18
19
  .github/workflows/codeql.yml
19
20
  .github/workflows/docs.yml
@@ -50,9 +50,12 @@ words:
50
50
  - tofile
51
51
  - tomli
52
52
  - undoc
53
+ - urllib
53
54
  - vararg
54
55
  - venv
55
56
  - viewcode
57
+ - virtualenv
58
+ - zizmor
56
59
  ignorePaths:
57
60
  - .env/**
58
61
  - .venv/**
@@ -238,6 +238,7 @@ REQUIRED_VERSIONS = {
238
238
  "1.8.1": ["jobs"],
239
239
  "1.9.0": ["ignore_tidy", "ignore_format"],
240
240
  "1.10.0": ["passive_reviews"],
241
+ "1.12.0": ["diff_base", "ignore_index"],
241
242
  }
242
243
  SUBCOMMAND_VERSIONS = {"version": "1.11.0"}
243
244
 
@@ -7,7 +7,7 @@ from pathlib import Path
7
7
  import urllib.parse
8
8
  import re
9
9
  import shutil
10
- from typing import Dict, cast, List, Optional
10
+ from typing import Dict, cast, List, Optional, Tuple, Union
11
11
  import warnings
12
12
 
13
13
  import pygit2 # type: ignore
@@ -15,7 +15,7 @@ import pytest
15
15
  import requests_mock
16
16
 
17
17
  from cpp_linter.common_fs import FileObj, CACHE_PATH
18
- from cpp_linter.git import parse_diff, get_diff
18
+ from cpp_linter.git import parse_diff, get_diff, get_sha
19
19
  from cpp_linter.clang_tools import capture_clang_tools_output, ClangVersions
20
20
  from cpp_linter.clang_tools.clang_format import tally_format_advice
21
21
  from cpp_linter.clang_tools.clang_tidy import tally_tidy_advice
@@ -172,6 +172,46 @@ def prep_tmp_dir(
172
172
  return (gh_client, files)
173
173
 
174
174
 
175
+ @pytest.mark.parametrize(
176
+ "repo_commit_pair",
177
+ [
178
+ (TEST_REPO_COMMIT_PAIRS[3]),
179
+ ],
180
+ ids=lambda pair: pair["repo"],
181
+ )
182
+ @pytest.mark.parametrize(
183
+ "ref_pair",
184
+ [
185
+ (None, "HEAD"),
186
+ ("HEAD", "HEAD"),
187
+ (2, "HEAD~2"),
188
+ ],
189
+ ids=["none", "HEAD", 2],
190
+ )
191
+ def test_get_sha(
192
+ tmp_path: Path,
193
+ monkeypatch: pytest.MonkeyPatch,
194
+ repo_commit_pair: Dict[str, str],
195
+ ref_pair: Tuple[Optional[Union[int, str]], str],
196
+ ):
197
+ """Test sha resolution with get_sha."""
198
+ repo_name, _ = repo_commit_pair["repo"], repo_commit_pair["commit"]
199
+ repo_cache = tmp_path.parent / repo_name / "HEAD"
200
+ repo_cache.mkdir(parents=True, exist_ok=True)
201
+ monkeypatch.chdir(str(repo_cache))
202
+ if not (repo_cache / ".git").exists():
203
+ pygit2.clone_repository(f"https://github.com/{repo_name}", ".")
204
+ repo_path = tmp_path / repo_name.split("/")[1]
205
+ shutil.copytree(str(repo_cache), str(repo_path))
206
+ monkeypatch.chdir(repo_path)
207
+
208
+ repo = pygit2.Repository(".")
209
+ our_ref, their_ref = ref_pair
210
+ our_sha = get_sha(repo, our_ref)
211
+ their_sha = repo.revparse_single(their_ref)
212
+ assert our_sha == their_sha
213
+
214
+
175
215
  @pytest.mark.parametrize(
176
216
  "repo_commit_pair",
177
217
  [
@@ -1,6 +1,6 @@
1
1
  """Tests related parsing input from CLI arguments."""
2
2
 
3
- from typing import List, Union
3
+ from typing import List, Optional, Union
4
4
  import pytest
5
5
  from cpp_linter.cli import get_cli_parser, Args
6
6
 
@@ -11,6 +11,9 @@ from cpp_linter.cli import get_cli_parser, Args
11
11
  [
12
12
  ("verbosity", "10", "verbosity", True),
13
13
  ("database", "build", "database", "build"),
14
+ ("diff-base", "5", "diff_base", 5),
15
+ ("diff-base", "main", "diff_base", "main"),
16
+ ("ignore-index", None, "ignore_index", True),
14
17
  ("style", "file", "style", "file"),
15
18
  ("tidy-checks", "-*", "tidy_checks", "-*"),
16
19
  ("version", "14", "version", "14"),
@@ -41,12 +44,17 @@ from cpp_linter.cli import get_cli_parser, Args
41
44
  )
42
45
  def test_arg_parser(
43
46
  arg_name: str,
44
- arg_value: str,
47
+ arg_value: Optional[str],
45
48
  attr_name: str,
46
49
  attr_value: Union[int, str, List[str], bool, None],
47
50
  ):
48
51
  """parameterized test of specific args compared to their parsed value"""
49
- args = get_cli_parser().parse_args([f"--{arg_name}={arg_value}"], namespace=Args())
52
+ if arg_value is None:
53
+ args = get_cli_parser().parse_args([f"--{arg_name}"], namespace=Args())
54
+ else:
55
+ args = get_cli_parser().parse_args(
56
+ [f"--{arg_name}={arg_value}"], namespace=Args()
57
+ )
50
58
  assert getattr(args, attr_name) == attr_value
51
59
  assert args.command is None
52
60
 
@@ -655,15 +655,15 @@ wheels = [
655
655
 
656
656
  [[package]]
657
657
  name = "filelock"
658
- version = "3.20.0"
658
+ version = "3.20.3"
659
659
  source = { registry = "https://pypi.org/simple" }
660
660
  resolution-markers = [
661
661
  "python_full_version >= '3.11'",
662
662
  "python_full_version == '3.10.*'",
663
663
  ]
664
- sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" }
664
+ sdist = { url = "https://files.pythonhosted.org/packages/1d/65/ce7f1b70157833bf3cb851b556a37d4547ceafc158aa9b34b36782f23696/filelock-3.20.3.tar.gz", hash = "sha256:18c57ee915c7ec61cff0ecf7f0f869936c7c30191bb0cf406f1341778d0834e1", size = 19485, upload-time = "2026-01-09T17:55:05.421Z" }
665
665
  wheels = [
666
- { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" },
666
+ { url = "https://files.pythonhosted.org/packages/b5/36/7fb70f04bf00bc646cd5bb45aa9eddb15e19437a28b8fb2b4a5249fac770/filelock-3.20.3-py3-none-any.whl", hash = "sha256:4b0dda527ee31078689fc205ec4f1c1bf7d56cf88b6dc9426c4f230e46c2dce1", size = 16701, upload-time = "2026-01-09T17:55:04.334Z" },
667
667
  ]
668
668
 
669
669
  [[package]]
@@ -907,6 +907,7 @@ wheels = [
907
907
  name = "meson"
908
908
  version = "1.9.1"
909
909
  source = { registry = "https://pypi.org/simple" }
910
+ sdist = { url = "https://files.pythonhosted.org/packages/48/d8/6c1dd1c740b7d5fd73a6ad67900a09e3dd6642013f58fa9e22ae6faaffc7/meson-1.9.1.tar.gz", hash = "sha256:4e076606f2afff7881d195574bddcd8d89286f35a17b4977a216f535dc0c74ac", size = 5083044, upload-time = "2025-11-13T00:38:38.509Z" }
910
911
  wheels = [
911
912
  { url = "https://files.pythonhosted.org/packages/9c/07/b48592d325cb86682829f05216e4efb2dc881762b8f1bafb48b57442307a/meson-1.9.1-py3-none-any.whl", hash = "sha256:f824ab770c041a202f532f69e114c971918ed2daff7ea56583d80642564598d0", size = 1030356, upload-time = "2025-09-22T18:39:37.458Z" },
912
913
  ]
@@ -1847,28 +1848,28 @@ wheels = [
1847
1848
 
1848
1849
  [[package]]
1849
1850
  name = "urllib3"
1850
- version = "2.5.0"
1851
+ version = "2.6.3"
1851
1852
  source = { registry = "https://pypi.org/simple" }
1852
- sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185, upload-time = "2025-06-18T14:07:41.644Z" }
1853
+ sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
1853
1854
  wheels = [
1854
- { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
1855
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
1855
1856
  ]
1856
1857
 
1857
1858
  [[package]]
1858
1859
  name = "virtualenv"
1859
- version = "20.35.3"
1860
+ version = "20.36.1"
1860
1861
  source = { registry = "https://pypi.org/simple" }
1861
1862
  dependencies = [
1862
1863
  { name = "distlib" },
1863
1864
  { name = "filelock", version = "3.19.1", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
1864
- { name = "filelock", version = "3.20.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1865
+ { name = "filelock", version = "3.20.3", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1865
1866
  { name = "platformdirs", version = "4.4.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version < '3.10'" },
1866
1867
  { name = "platformdirs", version = "4.5.0", source = { registry = "https://pypi.org/simple" }, marker = "python_full_version >= '3.10'" },
1867
1868
  { name = "typing-extensions", marker = "python_full_version < '3.11'" },
1868
1869
  ]
1869
- sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" }
1870
+ sdist = { url = "https://files.pythonhosted.org/packages/aa/a3/4d310fa5f00863544e1d0f4de93bddec248499ccf97d4791bc3122c9d4f3/virtualenv-20.36.1.tar.gz", hash = "sha256:8befb5c81842c641f8ee658481e42641c68b5eab3521d8e092d18320902466ba", size = 6032239, upload-time = "2026-01-09T18:21:01.296Z" }
1870
1871
  wheels = [
1871
- { url = "https://files.pythonhosted.org/packages/27/73/d9a94da0e9d470a543c1b9d3ccbceb0f59455983088e727b8a1824ed90fb/virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a", size = 5981061, upload-time = "2025-10-10T21:23:30.433Z" },
1872
+ { url = "https://files.pythonhosted.org/packages/6a/2a/dc2228b2888f51192c7dc766106cd475f1b768c10caaf9727659726f7391/virtualenv-20.36.1-py3-none-any.whl", hash = "sha256:575a8d6b124ef88f6f51d56d656132389f961062a9177016a50e4f507bbcc19f", size = 6008258, upload-time = "2026-01-09T18:20:59.425Z" },
1872
1873
  ]
1873
1874
 
1874
1875
  [[package]]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes