pygit2 1.19.1__tar.gz → 1.19.3__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 (201) hide show
  1. pygit2-1.19.3/AGENTS.md +279 -0
  2. {pygit2-1.19.1 → pygit2-1.19.3}/AUTHORS.md +5 -0
  3. {pygit2-1.19.1 → pygit2-1.19.3}/CHANGELOG.md +44 -0
  4. pygit2-1.19.3/CONTRIBUTING.md +91 -0
  5. {pygit2-1.19.1 → pygit2-1.19.3}/COPYING +2 -3
  6. {pygit2-1.19.1 → pygit2-1.19.3}/Makefile +1 -1
  7. {pygit2-1.19.1 → pygit2-1.19.3}/PKG-INFO +1 -1
  8. {pygit2-1.19.1 → pygit2-1.19.3}/build.ps1 +2 -0
  9. {pygit2-1.19.1 → pygit2-1.19.3}/build.sh +5 -5
  10. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/__init__.py +21 -2
  11. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/_build.py +1 -1
  12. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/_libgit2/ffi.pyi +12 -0
  13. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/_pygit2.pyi +147 -134
  14. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/_run.py +2 -0
  15. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/callbacks.py +4 -5
  16. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/config.py +6 -6
  17. pygit2-1.19.3/pygit2/decl/filter.h +49 -0
  18. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/types.h +2 -0
  19. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/enums.py +1 -1
  20. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/filter.py +99 -1
  21. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/index.py +3 -3
  22. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/repository.py +34 -7
  23. {pygit2-1.19.1 → pygit2-1.19.3}/pyproject.toml +9 -8
  24. {pygit2-1.19.1 → pygit2-1.19.3}/src/branch.c +1 -1
  25. {pygit2-1.19.1 → pygit2-1.19.3}/src/diff.c +2 -2
  26. {pygit2-1.19.1 → pygit2-1.19.3}/src/filter.c +2 -0
  27. {pygit2-1.19.1 → pygit2-1.19.3}/src/mailmap.c +1 -1
  28. {pygit2-1.19.1 → pygit2-1.19.3}/src/note.c +1 -1
  29. {pygit2-1.19.1 → pygit2-1.19.3}/src/object.c +1 -1
  30. {pygit2-1.19.1 → pygit2-1.19.3}/src/odb.c +51 -4
  31. {pygit2-1.19.1 → pygit2-1.19.3}/src/odb_backend.c +11 -3
  32. {pygit2-1.19.1 → pygit2-1.19.3}/src/patch.c +1 -1
  33. {pygit2-1.19.1 → pygit2-1.19.3}/src/pygit2.c +28 -45
  34. {pygit2-1.19.1 → pygit2-1.19.3}/src/refdb.c +3 -5
  35. {pygit2-1.19.1 → pygit2-1.19.3}/src/refdb_backend.c +14 -7
  36. {pygit2-1.19.1 → pygit2-1.19.3}/src/reference.c +1 -1
  37. {pygit2-1.19.1 → pygit2-1.19.3}/src/repository.c +2 -2
  38. {pygit2-1.19.1 → pygit2-1.19.3}/src/tag.c +1 -1
  39. {pygit2-1.19.1 → pygit2-1.19.3}/src/tree.c +1 -1
  40. {pygit2-1.19.1 → pygit2-1.19.3}/src/treebuilder.c +1 -1
  41. {pygit2-1.19.1 → pygit2-1.19.3}/src/utils.c +29 -0
  42. {pygit2-1.19.1 → pygit2-1.19.3}/src/utils.h +1 -17
  43. {pygit2-1.19.1 → pygit2-1.19.3}/src/walker.c +1 -1
  44. {pygit2-1.19.1 → pygit2-1.19.3}/src/worktree.c +1 -1
  45. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_config.py +29 -0
  46. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_filter.py +107 -13
  47. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_odb.py +18 -2
  48. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_refdb_backend.py +1 -4
  49. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_repository.py +13 -0
  50. {pygit2-1.19.1 → pygit2-1.19.3}/README.md +0 -0
  51. {pygit2-1.19.1 → pygit2-1.19.3}/SPONSORS.md +0 -0
  52. {pygit2-1.19.1 → pygit2-1.19.3}/build_tag.py +0 -0
  53. {pygit2-1.19.1 → pygit2-1.19.3}/mypy-stubtest.ini +0 -0
  54. {pygit2-1.19.1 → pygit2-1.19.3}/mypy.ini +0 -0
  55. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/blame.py +0 -0
  56. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/blob.py +0 -0
  57. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/branches.py +0 -0
  58. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/credentials.py +0 -0
  59. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/attr.h +0 -0
  60. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/blame.h +0 -0
  61. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/buffer.h +0 -0
  62. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/callbacks.h +0 -0
  63. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/checkout.h +0 -0
  64. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/clone.h +0 -0
  65. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/commit.h +0 -0
  66. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/common.h +0 -0
  67. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/config.h +0 -0
  68. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/describe.h +0 -0
  69. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/diff.h +0 -0
  70. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/errors.h +0 -0
  71. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/graph.h +0 -0
  72. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/index.h +0 -0
  73. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/indexer.h +0 -0
  74. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/merge.h +0 -0
  75. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/net.h +0 -0
  76. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/oid.h +0 -0
  77. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/options.h +0 -0
  78. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/pack.h +0 -0
  79. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/proxy.h +0 -0
  80. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/refspec.h +0 -0
  81. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/remote.h +0 -0
  82. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/repository.h +0 -0
  83. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/revert.h +0 -0
  84. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/stash.h +0 -0
  85. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/strarray.h +0 -0
  86. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/submodule.h +0 -0
  87. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/transaction.h +0 -0
  88. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/decl/transport.h +0 -0
  89. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/errors.py +0 -0
  90. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/ffi.py +0 -0
  91. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/legacyenums.py +0 -0
  92. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/options.py +0 -0
  93. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/packbuilder.py +0 -0
  94. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/py.typed +0 -0
  95. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/references.py +0 -0
  96. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/refspec.py +0 -0
  97. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/remotes.py +0 -0
  98. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/settings.py +0 -0
  99. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/submodules.py +0 -0
  100. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/transaction.py +0 -0
  101. {pygit2-1.19.1 → pygit2-1.19.3}/pygit2/utils.py +0 -0
  102. {pygit2-1.19.1 → pygit2-1.19.3}/pytest.ini +0 -0
  103. {pygit2-1.19.1 → pygit2-1.19.3}/requirements-test.txt +0 -0
  104. {pygit2-1.19.1 → pygit2-1.19.3}/requirements-typing.txt +0 -0
  105. {pygit2-1.19.1 → pygit2-1.19.3}/requirements-wheel.txt +0 -0
  106. {pygit2-1.19.1 → pygit2-1.19.3}/requirements.txt +0 -0
  107. {pygit2-1.19.1 → pygit2-1.19.3}/setup.cfg +0 -0
  108. {pygit2-1.19.1 → pygit2-1.19.3}/setup.py +0 -0
  109. {pygit2-1.19.1 → pygit2-1.19.3}/src/blob.c +0 -0
  110. {pygit2-1.19.1 → pygit2-1.19.3}/src/branch.h +0 -0
  111. {pygit2-1.19.1 → pygit2-1.19.3}/src/commit.c +0 -0
  112. {pygit2-1.19.1 → pygit2-1.19.3}/src/diff.h +0 -0
  113. {pygit2-1.19.1 → pygit2-1.19.3}/src/error.c +0 -0
  114. {pygit2-1.19.1 → pygit2-1.19.3}/src/error.h +0 -0
  115. {pygit2-1.19.1 → pygit2-1.19.3}/src/filter.h +0 -0
  116. {pygit2-1.19.1 → pygit2-1.19.3}/src/mailmap.h +0 -0
  117. {pygit2-1.19.1 → pygit2-1.19.3}/src/note.h +0 -0
  118. {pygit2-1.19.1 → pygit2-1.19.3}/src/object.h +0 -0
  119. {pygit2-1.19.1 → pygit2-1.19.3}/src/odb.h +0 -0
  120. {pygit2-1.19.1 → pygit2-1.19.3}/src/odb_backend.h +0 -0
  121. {pygit2-1.19.1 → pygit2-1.19.3}/src/oid.c +0 -0
  122. {pygit2-1.19.1 → pygit2-1.19.3}/src/oid.h +0 -0
  123. {pygit2-1.19.1 → pygit2-1.19.3}/src/patch.h +0 -0
  124. {pygit2-1.19.1 → pygit2-1.19.3}/src/refdb.h +0 -0
  125. {pygit2-1.19.1 → pygit2-1.19.3}/src/refdb_backend.h +0 -0
  126. {pygit2-1.19.1 → pygit2-1.19.3}/src/reference.h +0 -0
  127. {pygit2-1.19.1 → pygit2-1.19.3}/src/repository.h +0 -0
  128. {pygit2-1.19.1 → pygit2-1.19.3}/src/revspec.c +0 -0
  129. {pygit2-1.19.1 → pygit2-1.19.3}/src/revspec.h +0 -0
  130. {pygit2-1.19.1 → pygit2-1.19.3}/src/signature.c +0 -0
  131. {pygit2-1.19.1 → pygit2-1.19.3}/src/signature.h +0 -0
  132. {pygit2-1.19.1 → pygit2-1.19.3}/src/stash.c +0 -0
  133. {pygit2-1.19.1 → pygit2-1.19.3}/src/tree.h +0 -0
  134. {pygit2-1.19.1 → pygit2-1.19.3}/src/treebuilder.h +0 -0
  135. {pygit2-1.19.1 → pygit2-1.19.3}/src/types.h +0 -0
  136. {pygit2-1.19.1 → pygit2-1.19.3}/src/walker.h +0 -0
  137. {pygit2-1.19.1 → pygit2-1.19.3}/src/wildmatch.c +0 -0
  138. {pygit2-1.19.1 → pygit2-1.19.3}/src/wildmatch.h +0 -0
  139. {pygit2-1.19.1 → pygit2-1.19.3}/src/worktree.h +0 -0
  140. {pygit2-1.19.1 → pygit2-1.19.3}/test/__init__.py +0 -0
  141. {pygit2-1.19.1 → pygit2-1.19.3}/test/conftest.py +0 -0
  142. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/barerepo.zip +0 -0
  143. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/binaryfilerepo.zip +0 -0
  144. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/blameflagsrepo.zip +0 -0
  145. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/dirtyrepo.zip +0 -0
  146. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/emptyrepo.zip +0 -0
  147. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/encoding.zip +0 -0
  148. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/gpgsigned.zip +0 -0
  149. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/submodulerepo.zip +0 -0
  150. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/testrepo.zip +0 -0
  151. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/testrepoformerging.zip +0 -0
  152. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/testrepopacked.zip +0 -0
  153. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/trailerrepo.zip +0 -0
  154. {pygit2-1.19.1 → pygit2-1.19.3}/test/data/utf8branchrepo.zip +0 -0
  155. {pygit2-1.19.1 → pygit2-1.19.3}/test/keys/pygit2_empty +0 -0
  156. {pygit2-1.19.1 → pygit2-1.19.3}/test/keys/pygit2_empty.pub +0 -0
  157. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_apply_diff.py +0 -0
  158. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_archive.py +0 -0
  159. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_attributes.py +0 -0
  160. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_blame.py +0 -0
  161. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_blob.py +0 -0
  162. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_branch.py +0 -0
  163. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_branch_empty.py +0 -0
  164. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_cherrypick.py +0 -0
  165. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_commit.py +0 -0
  166. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_commit_gpg.py +0 -0
  167. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_commit_trailer.py +0 -0
  168. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_credentials.py +0 -0
  169. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_describe.py +0 -0
  170. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_diff.py +0 -0
  171. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_diff_binary.py +0 -0
  172. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_index.py +0 -0
  173. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_mailmap.py +0 -0
  174. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_merge.py +0 -0
  175. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_nonunicode.py +0 -0
  176. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_note.py +0 -0
  177. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_object.py +0 -0
  178. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_odb_backend.py +0 -0
  179. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_oid.py +0 -0
  180. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_options.py +0 -0
  181. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_packbuilder.py +0 -0
  182. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_patch.py +0 -0
  183. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_patch_encoding.py +0 -0
  184. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_refs.py +0 -0
  185. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_remote.py +0 -0
  186. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_remote_prune.py +0 -0
  187. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_remote_utf8.py +0 -0
  188. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_repository_bare.py +0 -0
  189. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_repository_custom.py +0 -0
  190. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_repository_empty.py +0 -0
  191. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_revparse.py +0 -0
  192. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_revwalk.py +0 -0
  193. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_settings.py +0 -0
  194. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_signature.py +0 -0
  195. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_status.py +0 -0
  196. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_submodule.py +0 -0
  197. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_tag.py +0 -0
  198. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_transaction.py +0 -0
  199. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_tree.py +0 -0
  200. {pygit2-1.19.1 → pygit2-1.19.3}/test/test_treebuilder.py +0 -0
  201. {pygit2-1.19.1 → pygit2-1.19.3}/test/utils.py +0 -0
@@ -0,0 +1,279 @@
1
+ # pygit2 Agent Guide
2
+
3
+ ## Project Overview
4
+
5
+ **pygit2** is a Python library that provides bindings to
6
+ [libgit2](https://libgit2.org/), the shared C library that implements Git
7
+ plumbing operations. It exposes both a low-level API (direct libgit2 wrappers)
8
+ and a high-level, Pythonic API for repository manipulation.
9
+
10
+ - **Version**: 1.19.3 (canonical version is defined in `pygit2/_build.py`)
11
+ - **License**: GPLv2 with linking exception (see `COPYING`)
12
+ - **Maintainer**: J. David Ibáñez
13
+ - **Python Support**: 3.11 – 3.14 and PyPy3 7.3+
14
+ - **libgit2 Version**: 1.9.4
15
+ - **Homepage**: <https://www.pygit2.org/>
16
+ - **Repository**: <https://github.com/libgit2/pygit2>
17
+
18
+ ## Architecture
19
+
20
+ The project uses a **hybrid C/Python** architecture with two compiled extension
21
+ modules:
22
+
23
+ - **`src/`** — C11 source and header files that compile into the `_pygit2` C
24
+ extension module. Each file generally maps to a libgit2 concept:
25
+ - Core objects: `blob.c`, `commit.c`, `object.c`, `tag.c`, `tree.c`
26
+ - Repository, refs and branches: `repository.c`, `branch.c`, `reference.c`,
27
+ `refdb.c`, `refdb_backend.c`, `revspec.c`, `worktree.c`
28
+ - Diff and patch: `diff.c`, `patch.c`
29
+ - ODB and backends: `odb.c`, `odb_backend.c`
30
+ - Index, walking and helpers: `treebuilder.c`, `walker.c`, `oid.c`,
31
+ `note.c`, `signature.c`, `mailmap.c`, `stash.c`
32
+ - Filters: `filter.c`
33
+ - Module infrastructure: `pygit2.c`, `error.c`, `utils.c`, `wildmatch.c`
34
+ - Headers: `*.h` files mirroring the C sources (e.g. `repository.h`,
35
+ `diff.h`, `types.h`, `error.h`)
36
+
37
+ - **`pygit2/`** — The main Python package.
38
+ - **`_pygit2*.so`** — Compiled C extension built from `src/`.
39
+ - **`_libgit2.abi3.so`** — CFFI-generated ABI module built from
40
+ `pygit2/_run.py`.
41
+ - **`decl/`** — C header stub files used by CFFI to define the libgit2 API
42
+ surface (e.g. `types.h`, `repository.h`, `callbacks.h`, `diff.h`,
43
+ `remote.h`). `pygit2/_run.py` concatenates these stubs in a specific order
44
+ before passing them to CFFI.
45
+ - **`_build.py`** — Build-time helpers and the canonical `__version__`
46
+ string. Also used at runtime to locate libgit2. It must remain importable
47
+ without the rest of the package being built because `setup.py` imports it.
48
+ - **`_run.py`** — CFFI build script that aggregates `decl/*.h` and compiles
49
+ `pygit2._libgit2`.
50
+ - **`ffi.py`** — Runtime import of the CFFI `ffi` and `lib` (`C`) objects.
51
+ - **`_pygit2.pyi`** — Type stubs for the C extension. Keep it in sync when
52
+ adding or changing low-level APIs.
53
+ - **`py.typed`** — PEP 561 marker indicating the package is typed.
54
+ - **High-level modules** — Pure-Python wrappers that sit on top of the C
55
+ extension:
56
+ `repository.py`, `callbacks.py`, `config.py`, `index.py`, `remotes.py`,
57
+ `settings.py`, `submodules.py`, `transaction.py`, `filter.py`, `blob.py`,
58
+ `blame.py`, `branches.py`, `credentials.py`, `errors.py`, `options.py`,
59
+ `packbuilder.py`, `references.py`, `refspec.py`, `utils.py`, `enums.py`,
60
+ `legacyenums.py`.
61
+
62
+ - **`test/`** — pytest suite with fixture-based repository handling.
63
+ - **`docs/`** — Sphinx documentation (RTD theme).
64
+
65
+ ## Key Configuration Files
66
+
67
+ - **`setup.py`** — setuptools entry point. Builds both the C extension
68
+ (`src/*.c`) and the CFFI extension (`pygit2/_run.py:ffi`).
69
+ - **`pyproject.toml`** — Build-system requirements, `cibuildwheel`
70
+ configuration, `ruff` settings, and `codespell` settings.
71
+ - **`setup.cfg`** — Legacy pycodestyle configuration.
72
+ - **`pytest.ini`** — pytest configuration (`--capture=no -ra --verbose`,
73
+ `testpaths = test/`).
74
+ - **`mypy.ini`** — mypy configuration with strict settings.
75
+ - **`mypy-stubtest.ini`** — mypy configuration for `stubtest` against
76
+ `_pygit2.pyi`.
77
+ - **`requirements.txt`** — Runtime/build requirements (`cffi>=2.0`,
78
+ `setuptools` for Python >= 3.12).
79
+ - **`requirements-test.txt`** — Test requirements (`pytest`, `pytest-cov`).
80
+ - **`requirements-typing.txt`** — Typing requirements (`mypy`, `types-cffi`).
81
+ - **`Makefile`** — Convenience targets: `make` builds dependencies + extension
82
+ inplace; `make html` builds docs.
83
+ - **`.vimrc`** — Local editor configuration for C development with ALE
84
+ (`-std=c11 -Wall`, Python include path, `/usr/local/include`).
85
+
86
+ ## Build and Test Commands
87
+
88
+ ### Quick Development Build (inplace)
89
+
90
+ Requires libgit2 development headers and library to be installed on the system
91
+ or pointed to via the `LIBGIT2` environment variable.
92
+
93
+ ```bash
94
+ python setup.py build_ext --inplace
95
+ pytest
96
+ ```
97
+
98
+ ### Full Build with Dependencies
99
+
100
+ The `build.sh` script can download, compile, and bundle libgit2 (and optionally
101
+ libssh2, OpenSSL, and zlib) into a local prefix. On Windows, `build.ps1`
102
+ handles libgit2 compilation via CMake.
103
+
104
+ ```bash
105
+ # Build inplace with bundled libgit2/libssh2/OpenSSL
106
+ make
107
+
108
+ # Or manually:
109
+ LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.4 sh build.sh
110
+
111
+ # Build inplace and run the tests
112
+ sh build.sh test
113
+
114
+ # Build a wheel, install it, and run the tests
115
+ sh build.sh wheel
116
+
117
+ # Run tests with coverage
118
+ sh build.sh test # build.sh adds --cov=pygit2
119
+
120
+ # Run mypy type checking
121
+ sh build.sh mypy
122
+
123
+ # Run stubtest against the .pyi file
124
+ sh build.sh stubtest
125
+ ```
126
+
127
+ `build.sh` creates a virtual environment under `ci/<python_tag>/` by default,
128
+ where `<python_tag>` is computed by `build_tag.py`. Use the `PYTHON`
129
+ environment variable to select a different interpreter (default: `python3`).
130
+
131
+ ### Environment Variables
132
+
133
+ Variables consumed by `setup.py` / `pygit2/_build.py`:
134
+
135
+ - `LIBGIT2` — Base path where libgit2 is installed (default: `/usr/local` or
136
+ `%ProgramFiles%\libgit2` on Windows).
137
+ - `LIBGIT2_LIB` — Override the library directory specifically.
138
+
139
+ Variables consumed by `build.sh`:
140
+
141
+ - `LIBGIT2_VERSION` — If set, download and build this libgit2 version.
142
+ - `LIBSSH2_VERSION` — If set, download and build libssh2 with SSH support.
143
+ - `OPENSSL_VERSION` — If set, download and build OpenSSL (mainly used for
144
+ macOS universal builds on CI).
145
+ - `ZLIB_VERSION` — If set, download and build zlib.
146
+ - `BUILD_TYPE` — CMake build type (default: `Debug`).
147
+ - `PYTHON` — Python interpreter to use (default: `python3`).
148
+ - `PREFIX` — Installation prefix (default: `$(pwd)/ci/$PYTHON_TAG`).
149
+ - `CIBUILDWHEEL` — Set to `1` when invoked by cibuildwheel; changes package
150
+ manager and directory layout.
151
+ - `AUDITWHEEL_PLAT` — Linux platform for auditwheel repair.
152
+ - `LIBSSH2_OPENSSL` — Where to find OpenSSL when building libssh2.
153
+
154
+ ### Documentation Build
155
+
156
+ ```bash
157
+ # Build the extension first, then docs
158
+ make # builds deps + extension
159
+ make -C docs html # requires sphinx-rtd-theme
160
+ ```
161
+
162
+ ## Code Style Guidelines
163
+
164
+ ### Python
165
+
166
+ - **Formatter / Linter**: [ruff](https://docs.astral.sh/ruff/)
167
+ - Target Python: 3.11+
168
+ - Quote style: single quotes
169
+ - Selected rules: `E4`, `E7`, `E9`, `F`, `I`, `UP035`, `UP007`
170
+ - **Type checker**: mypy (strict settings enabled; see `mypy.ini`)
171
+ - All Python source files must include the standard GPLv2 copyright header.
172
+ - `pygit2/__init__.py` is large because it re-exports a large surface of
173
+ constants and classes; follow existing patterns when adding new public
174
+ symbols.
175
+
176
+ ### C
177
+
178
+ - Standard: C11
179
+ - All C source files must include the standard GPLv2 copyright header.
180
+ - The `.vimrc` at repo root configures ALE with `-std=c11 -Wall` and includes
181
+ the Python headers and `/usr/local/include`.
182
+
183
+ ### Docstrings
184
+
185
+ Use the following style (from `docs/development.rst`):
186
+
187
+ ```python
188
+ def f(a, b):
189
+ """
190
+ The general description goes here.
191
+
192
+ Returns: bla bla.
193
+
194
+ Parameters:
195
+
196
+ a : <type>
197
+ Bla bla.
198
+
199
+ b : <type>
200
+ Bla bla.
201
+
202
+ Examples::
203
+
204
+ >>> f(...)
205
+ """
206
+ ```
207
+
208
+ ## Testing Instructions
209
+
210
+ - **Runner**: pytest
211
+ - **Configuration**: `pytest.ini`
212
+ ```ini
213
+ [pytest]
214
+ addopts = --capture=no -ra --verbose
215
+ testpaths = test/
216
+ ```
217
+ - **Fixtures**: Defined in `test/conftest.py`. They yield `pygit2.Repository`
218
+ instances extracted from zipped sample repos in `test/data/` (e.g.
219
+ `testrepo.zip`, `barerepo.zip`). Named fixtures include `testrepo`,
220
+ `testrepo_path`, `barerepo`, `barerepo_path`, `emptyrepo`, `dirtyrepo`,
221
+ `mergerepo`, `encodingrepo`, `testrepopacked`, `gpgsigned`, `blameflagsrepo`,
222
+ and `pygit2_empty_key`.
223
+ - **Test utilities**: `test/utils.py` provides helpers such as
224
+ `TemporaryRepository`, `gen_blob_sha1`, `rmtree`, `diff_safeiter`, and
225
+ markers like `requires_network`, `requires_proxy`, `requires_ssh`,
226
+ `requires_refcount`, `fails_in_macos`, and `requires_future_libgit2`.
227
+ - **Isolation**: The session-scoped `global_git_config` fixture clears
228
+ `GLOBAL`, `XDG`, and `SYSTEM` config search paths to ensure reproducibility.
229
+ - **Coverage**: `pytest-cov` is used; run via `sh build.sh test`.
230
+
231
+ ## CI / Deployment
232
+
233
+ GitHub Actions workflows live in `.github/workflows/`:
234
+
235
+ - **`tests.yml`** — Runs on s390x via QEMU (`uraimo/run-on-arch-action`).
236
+ Allowed to fail; see issue #812.
237
+ - **`lint.yml`** — Runs `ruff format --diff`, `ruff check`, and
238
+ `sh build.sh mypy`.
239
+ - **`wheels.yml`** — Uses `cibuildwheel` to build wheels for Linux (amd64,
240
+ arm64, ppc64le, musl), macOS (intel, arm64, PyPy), and Windows (x64, x86,
241
+ arm64). It also builds an sdist, runs a `twine check`, publishes to PyPI,
242
+ and creates a GitHub Release on version tags (`v*`).
243
+ - **`codespell.yml`** — Spell checking with the codespell action.
244
+
245
+ The `cibuildwheel` configuration in `pyproject.toml` pins:
246
+
247
+ - `LIBGIT2_VERSION="1.9.4"`
248
+ - `LIBSSH2_VERSION="1.11.1"`
249
+ - `OPENSSL_VERSION="3.5.4"`
250
+
251
+ and skips `*musllinux_ppc64le` plus testing on `*-*linux_ppc64le` and
252
+ `pp*-macosx_arm64`.
253
+
254
+ ## Security Considerations
255
+
256
+ - The project links against OpenSSL and libssh2. CI pins specific versions of
257
+ these libraries when building wheels.
258
+ - Wheel repair commands (`auditwheel`, `delocate-wheel`) bundle shared
259
+ libraries so wheels are self-contained.
260
+ - Credentials callbacks (`RemoteCallbacks`, `get_credentials`) are the primary
261
+ interface for supplying secrets; never hardcode credentials in tests.
262
+ - Valgrind support: see `docs/development.rst` and
263
+ `misc/valgrind-python.supp` for memory-leak debugging instructions.
264
+
265
+ ## Useful Notes for Agents
266
+
267
+ - **Do not assume libgit2 is installed globally.** Check for `LIBGIT2` or use
268
+ `build.sh` / `make`.
269
+ - **`pygit2/_build.py`** is imported by `setup.py`; it must remain importable
270
+ without the rest of the package being built.
271
+ - **CFFI and setuptools extensions are both built from `setup.py`.**
272
+ `ext_modules` builds the C extension from `src/*.c`; `cffi_modules` triggers
273
+ the CFFI build via `pygit2/_run.py:ffi`.
274
+ - **`.pyi` stub file**: `pygit2/_pygit2.pyi` provides type stubs for the C
275
+ extension. Keep it in sync when adding or changing low-level APIs.
276
+ - **Header stub order matters**: `pygit2/_run.py` concatenates `decl/*.h` in a
277
+ fixed list; add new stubs in the correct position if dependencies require it.
278
+ - Run the full test suite and type checks before considering a change complete:
279
+ `sh build.sh test` and `sh build.sh mypy`.
@@ -74,6 +74,7 @@ Authors:
74
74
  Christian Häggström
75
75
  Edmundo Carmona Antoranz
76
76
  Erik Johnson
77
+ Ethan Meng
77
78
  Filip Rindler
78
79
  Fraser Tweedale
79
80
  Grégoire ROCHER
@@ -138,6 +139,7 @@ Authors:
138
139
  Adam Spiers
139
140
  Adrien Nader
140
141
  Albin Söderström
142
+ Alexander Shadchin
141
143
  Alexandru Fikl
142
144
  Andrew Chin
143
145
  Andrew McNulty
@@ -182,6 +184,7 @@ Authors:
182
184
  Hugh Cole-Baker
183
185
  Isabella Stephens
184
186
  Jacob Swanson
187
+ Jah-yee
185
188
  Jasper Lievisse Adriaanse
186
189
  Jimisola Laursen
187
190
  Jiri Benc
@@ -204,6 +207,7 @@ Authors:
204
207
  Matěj Cepl
205
208
  Maxwell G
206
209
  Michał Górny
210
+ Mukunda Rao Katta
207
211
  Na'aman Hirschfeld
208
212
  Nicolas Rybowski
209
213
  Nicolás Sanguinetti
@@ -237,6 +241,7 @@ Authors:
237
241
  Timo Röhling
238
242
  Victor Florea
239
243
  Vladimir Rutsky
244
+ Vruyr Gyolchanyan
240
245
  William Schueller
241
246
  Wim Jeantine-Glenn
242
247
  Yu Jianjian
@@ -1,3 +1,47 @@
1
+ # 1.19.3 (2026-06-13)
2
+
3
+ - Memory fixes
4
+ [#1368](https://github.com/libgit2/pygit2/issues/1368)
5
+ [#1417](https://github.com/libgit2/pygit2/issues/1417)
6
+ [#1443](https://github.com/libgit2/pygit2/issues/1443)
7
+
8
+ - Fix `Repository.ident`
9
+ [#1461](https://github.com/libgit2/pygit2/pull/1461)
10
+
11
+ - Build/CI fixes and updates
12
+ [#1454](https://github.com/libgit2/pygit2/issues/1454)
13
+ [#1459](https://github.com/libgit2/pygit2/pull/1459)
14
+
15
+ - Documentation and annotation fixes
16
+ [#410](https://github.com/libgit2/pygit2/issues/410)
17
+ [#1289](https://github.com/libgit2/pygit2/issues/1289)
18
+ [#1323](https://github.com/libgit2/pygit2/issues/1323)
19
+ [#1333](https://github.com/libgit2/pygit2/issues/1333)
20
+ [#1458](https://github.com/libgit2/pygit2/issues/1458)
21
+ [#1460](https://github.com/libgit2/pygit2/pull/1460)
22
+
23
+ - Add `AGENTS.md` file generated by Kimi-k2.6
24
+
25
+
26
+ # 1.19.2 (2026-03-29)
27
+
28
+ - Fix refcount and error handling issues in `filter_register(...)`
29
+
30
+ - Fix config with valueless keys
31
+ [#1457](https://github.com/libgit2/pygit2/pull/1457)
32
+
33
+ - New `Repository.load_filter_list(...)` and `FilterList`
34
+ [#1444](https://github.com/libgit2/pygit2/pull/1444)
35
+
36
+ - New `Odb.read_header(...)` and now `Odb.read(...)` returns `enums.ObjectType` instead of int
37
+ [#1450](https://github.com/libgit2/pygit2/pull/1450)
38
+
39
+ - Build and CI fixes
40
+ [#1446](https://github.com/libgit2/pygit2/pull/1446)
41
+ [#1448](https://github.com/libgit2/pygit2/pull/1448)
42
+ [#1455](https://github.com/libgit2/pygit2/pull/1455)
43
+
44
+
1
45
  # 1.19.1 (2025-12-29)
2
46
 
3
47
  - Update wheels to libgit2 1.9.2 and OpenSSL 3.5
@@ -0,0 +1,91 @@
1
+ # Contributing to pygit2
2
+
3
+ Thank you for your interest in improving pygit2! This document covers how to submit pull requests and help others in the community.
4
+
5
+ ---
6
+
7
+ ## Pull Requests
8
+
9
+ We welcome pull requests that fix bugs, add features, improve documentation, or clean up code. To ensure a smooth review process, please follow the steps below.
10
+
11
+ ### Development Setup
12
+
13
+ See the [install documentation](https://www.pygit2.org/install.html) for instructions on building pygit2 and its libgit2 dependency.
14
+
15
+ ### Making Changes
16
+
17
+ 1. **Fork the repository** and create a feature branch.
18
+ 2. **Follow the existing code style** (see below).
19
+ 3. **Add or update tests** for any new or changed behavior. Tests live in `test/` and are run with `pytest`.
20
+ 4. **Update type stubs** (`pygit2/_pygit2.pyi`) if you modify the C extension's public API.
21
+ 5. **Update `pygit2/__init__.py`** if you add new public symbols that should be re-exported.
22
+ 6. **Ensure the test suite passes**:
23
+ ```bash
24
+ pytest
25
+ ```
26
+ 7. **Run the linters and type checker**:
27
+ ```bash
28
+ ruff format --diff
29
+ ruff check
30
+ sh build.sh mypy # or: mypy
31
+ sh build.sh stubtest # validate .pyi stubs
32
+ ```
33
+ 8. **Build the documentation** if you changed it (requires `sphinx-rtd-theme`):
34
+ ```bash
35
+ make -C docs html
36
+ ```
37
+ 9. **Write a clear commit message** explaining the *what* and *why*.
38
+
39
+ ### Code Style
40
+
41
+ - **Python:** We target Python 3.11+. Use single quotes. Run `ruff format` and `ruff check` before submitting.
42
+ - **C:** We use C11. Follow `-std=c11 -Wall`. Match the style of the surrounding code in `src/`.
43
+ - **Copyright headers:** All source files must include the standard GPLv2 copyright header. Copy it from an existing file.
44
+ - **Docstrings:** Use the style shown in `docs/development.rst`:
45
+ ```python
46
+ def f(a, b):
47
+ """
48
+ The general description goes here.
49
+
50
+ Returns: bla bla.
51
+
52
+ Parameters:
53
+
54
+ a : <type>
55
+ Bla bla.
56
+
57
+ b : <type>
58
+ Bla bla.
59
+ """
60
+ ```
61
+
62
+ ### Pull Request Review
63
+
64
+ - All PRs require review from a maintainer.
65
+ - CI will run tests, linting, and type checks automatically.
66
+ - Be responsive to feedback and willing to iterate.
67
+ - Keep PRs focused. A pull request that does one thing well is easier to review than a large, mixed one.
68
+
69
+ ---
70
+
71
+ ## Helping Others
72
+
73
+ You do not need to write code to contribute. Helping others is valuable:
74
+
75
+ - **Answer questions** in open issues and pull requests. If you know the answer, share it.
76
+ - **Review PRs.** Even if you are not a maintainer, constructive reviews from the community are welcome.
77
+ - **Improve documentation.** Doc fixes, clarifications, and typo corrections can be submitted as PRs just like code.
78
+ - **Reproduce reported issues.** Confirming a bug on your system helps maintainers prioritize fixes.
79
+
80
+ ---
81
+
82
+ ## Commit Messages
83
+
84
+ - Use the present tense and imperative mood (e.g., "Add support for…", not "Added support for…").
85
+ - Keep the subject line under 72 characters.
86
+ - Reference related issues with `Fixes #123` or `Closes #456` when applicable.
87
+ - If you used AI assistance while preparing the change, mention it in the commit message with a tag such as `Assisted-by: Kimi-k2.6` (or the appropriate model name).
88
+
89
+ ---
90
+
91
+ Thank you for contributing!
@@ -316,9 +316,8 @@ the "copyright" line and a pointer to where the full notice is found.
316
316
  Copyright (C) <year> <name of author>
317
317
 
318
318
  This program is free software; you can redistribute it and/or modify
319
- it under the terms of the GNU General Public License as published by
320
- the Free Software Foundation; either version 2 of the License, or
321
- (at your option) any later version.
319
+ it under the terms of the GNU General Public License, version 2,
320
+ as published by the Free Software Foundation.
322
321
 
323
322
  This program is distributed in the hope that it will be useful,
324
323
  but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -1,7 +1,7 @@
1
1
  .PHONY: build html
2
2
 
3
3
  build:
4
- OPENSSL_VERSION=3.5.4 LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.2 sh build.sh
4
+ OPENSSL_VERSION=3.5.4 LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.4 sh build.sh
5
5
 
6
6
  html: build
7
7
  make -C docs html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygit2
3
- Version: 1.19.1
3
+ Version: 1.19.3
4
4
  Summary: Python bindings for libgit2.
5
5
  Home-page: https://github.com/libgit2/pygit2
6
6
  Maintainer: J. David Ibáñez
@@ -1,3 +1,5 @@
1
+ $ErrorActionPreference = 'Stop'
2
+
1
3
  if (!(Test-Path -Path "build")) {
2
4
  # in case the pygit2 package build/ workspace has not been created by cibuildwheel yet
3
5
  mkdir build
@@ -22,14 +22,14 @@
22
22
  #
23
23
  # sh build.sh
24
24
  #
25
- # Build libgit2 1.9.2 (will use libssh2 if available), then build pygit2
25
+ # Build libgit2 1.9.4 (will use libssh2 if available), then build pygit2
26
26
  # inplace:
27
27
  #
28
- # LIBGIT2_VERSION=1.9.2 sh build.sh
28
+ # LIBGIT2_VERSION=1.9.4 sh build.sh
29
29
  #
30
- # Build libssh2 1.11.1 and libgit2 1.9.2, then build pygit2 inplace:
30
+ # Build libssh2 1.11.1 and libgit2 1.9.4, then build pygit2 inplace:
31
31
  #
32
- # LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.2 sh build.sh
32
+ # LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.4 sh build.sh
33
33
  #
34
34
  # Build inplace and run the tests:
35
35
  #
@@ -217,7 +217,7 @@ if [ "$CIBUILDWHEEL" = "1" ]; then
217
217
  cp $OPENSSL_PREFIX/*.dylib $PREFIX/lib/
218
218
  echo "PREFIX " $PREFIX
219
219
  echo "OPENSSL_PREFIX" $OPENSSL_PREFIX
220
- ls -l /Users/runner/work/pygit2/pygit2/ci/
220
+ ls -l $PREFIX
221
221
  ls -l $PREFIX/lib
222
222
  fi
223
223
  # we're done building dependencies, cibuildwheel action will take over
@@ -286,7 +286,6 @@ from ._pygit2 import (
286
286
  _cache_enums,
287
287
  discover_repository,
288
288
  filter_register,
289
- filter_unregister,
290
289
  hash,
291
290
  hashfile,
292
291
  init_file_backend,
@@ -545,6 +544,27 @@ def clone_repository(
545
544
  return Repository._from_c(crepo[0], owned=True)
546
545
 
547
546
 
547
+ def filter_unregister(name: str) -> None:
548
+ """
549
+ Unregister the given filter.
550
+
551
+ Note that the filter registry is not thread safe. Any registering or
552
+ deregistering of filters should be done outside of any possible usage
553
+ of the filters.
554
+
555
+ In particular, any FilterLists that use the filter must have been garbage
556
+ collected before you can unregister the filter.
557
+ """
558
+ from .filter import FilterList
559
+
560
+ if FilterList._is_filter_in_use(name):
561
+ raise RuntimeError(f"filter still in use: '{name}'")
562
+
563
+ c_name = to_bytes(name)
564
+ err = C.git_filter_unregister(c_name)
565
+ check_error(err)
566
+
567
+
548
568
  tree_entry_key = functools.cmp_to_key(tree_entry_cmp)
549
569
 
550
570
  settings = Settings()
@@ -610,7 +630,6 @@ __all__ = (
610
630
  # Low Level API (not present in .pyi)
611
631
  'FilterSource',
612
632
  'filter_register',
613
- 'filter_unregister',
614
633
  'GIT_APPLY_LOCATION_BOTH',
615
634
  'GIT_APPLY_LOCATION_INDEX',
616
635
  'GIT_APPLY_LOCATION_WORKDIR',
@@ -34,7 +34,7 @@ from pathlib import Path
34
34
  #
35
35
  # The version number of pygit2
36
36
  #
37
- __version__ = '1.19.1'
37
+ __version__ = '1.19.3'
38
38
 
39
39
 
40
40
  #
@@ -123,6 +123,10 @@ class GitBlameC:
123
123
  # incomplete
124
124
  pass
125
125
 
126
+ class GitBlobC:
127
+ # incomplete
128
+ pass
129
+
126
130
  class GitMergeOptionsC:
127
131
  file_favor: int
128
132
  flags: int
@@ -177,6 +181,10 @@ class GitDescribeOptionsC:
177
181
  class GitDescribeResultC:
178
182
  pass
179
183
 
184
+ class GitFilterListC:
185
+ # opaque struct
186
+ pass
187
+
180
188
  class GitIndexC:
181
189
  pass
182
190
 
@@ -264,6 +272,8 @@ def new(a: Literal['git_oid *']) -> GitOidC: ...
264
272
  @overload
265
273
  def new(a: Literal['git_blame **']) -> _Pointer[GitBlameC]: ...
266
274
  @overload
275
+ def new(a: Literal['git_blob **']) -> _Pointer[GitBlobC]: ...
276
+ @overload
267
277
  def new(a: Literal['git_clone_options *']) -> GitCloneOptionsC: ...
268
278
  @overload
269
279
  def new(a: Literal['git_merge_options *']) -> GitMergeOptionsC: ...
@@ -318,6 +328,8 @@ def new(a: Literal['git_signature *']) -> GitSignatureC: ...
318
328
  @overload
319
329
  def new(a: Literal['git_signature **']) -> _Pointer[GitSignatureC]: ...
320
330
  @overload
331
+ def new(a: Literal['git_filter_list **']) -> _Pointer[GitFilterListC]: ...
332
+ @overload
321
333
  def new(a: Literal['int *']) -> int_c: ...
322
334
  @overload
323
335
  def new(a: Literal['int64_t *']) -> int64_t: ...