pygit2 1.15.1__tar.gz → 1.17.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 (189) hide show
  1. {pygit2-1.15.1 → pygit2-1.17.0}/AUTHORS.md +9 -1
  2. {pygit2-1.15.1 → pygit2-1.17.0}/CHANGELOG.md +43 -0
  3. pygit2-1.17.0/Makefile +7 -0
  4. {pygit2-1.15.1 → pygit2-1.17.0}/PKG-INFO +6 -7
  5. {pygit2-1.15.1 → pygit2-1.17.0}/README.md +1 -3
  6. {pygit2-1.15.1 → pygit2-1.17.0}/SPONSORS.md +3 -4
  7. {pygit2-1.15.1 → pygit2-1.17.0}/build.sh +4 -4
  8. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/__init__.py +1 -1
  9. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/_build.py +2 -2
  10. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/_pygit2.pyi +2 -2
  11. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/_run.py +1 -1
  12. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/blame.py +1 -1
  13. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/branches.py +1 -1
  14. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/callbacks.py +8 -7
  15. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/config.py +4 -7
  16. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/credentials.py +1 -1
  17. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/blame.h +3 -0
  18. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/callbacks.h +1 -1
  19. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/config.h +0 -1
  20. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/remote.h +1 -0
  21. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/repository.h +1 -0
  22. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/types.h +11 -0
  23. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/enums.py +7 -7
  24. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/errors.py +1 -1
  25. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/ffi.py +1 -1
  26. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/filter.py +1 -1
  27. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/index.py +3 -6
  28. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/legacyenums.py +1 -1
  29. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/packbuilder.py +1 -1
  30. pygit2-1.17.0/pygit2/py.typed +1 -0
  31. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/references.py +1 -1
  32. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/refspec.py +1 -1
  33. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/remotes.py +1 -1
  34. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/repository.py +54 -1
  35. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/settings.py +1 -1
  36. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/submodules.py +1 -1
  37. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/utils.py +3 -3
  38. {pygit2-1.15.1 → pygit2-1.17.0}/pyproject.toml +5 -4
  39. {pygit2-1.15.1 → pygit2-1.17.0}/setup.py +7 -6
  40. {pygit2-1.15.1 → pygit2-1.17.0}/src/blob.c +1 -1
  41. {pygit2-1.15.1 → pygit2-1.17.0}/src/branch.c +1 -1
  42. {pygit2-1.15.1 → pygit2-1.17.0}/src/branch.h +1 -1
  43. {pygit2-1.15.1 → pygit2-1.17.0}/src/commit.c +1 -1
  44. {pygit2-1.15.1 → pygit2-1.17.0}/src/diff.c +1 -1
  45. {pygit2-1.15.1 → pygit2-1.17.0}/src/diff.h +1 -1
  46. {pygit2-1.15.1 → pygit2-1.17.0}/src/error.c +1 -1
  47. {pygit2-1.15.1 → pygit2-1.17.0}/src/error.h +1 -1
  48. {pygit2-1.15.1 → pygit2-1.17.0}/src/filter.c +1 -1
  49. {pygit2-1.15.1 → pygit2-1.17.0}/src/filter.h +1 -1
  50. {pygit2-1.15.1 → pygit2-1.17.0}/src/mailmap.c +1 -1
  51. {pygit2-1.15.1 → pygit2-1.17.0}/src/mailmap.h +1 -1
  52. {pygit2-1.15.1 → pygit2-1.17.0}/src/note.c +1 -1
  53. {pygit2-1.15.1 → pygit2-1.17.0}/src/note.h +1 -1
  54. {pygit2-1.15.1 → pygit2-1.17.0}/src/object.c +1 -1
  55. {pygit2-1.15.1 → pygit2-1.17.0}/src/object.h +1 -1
  56. {pygit2-1.15.1 → pygit2-1.17.0}/src/odb.c +1 -1
  57. {pygit2-1.15.1 → pygit2-1.17.0}/src/odb.h +1 -1
  58. {pygit2-1.15.1 → pygit2-1.17.0}/src/odb_backend.c +1 -1
  59. {pygit2-1.15.1 → pygit2-1.17.0}/src/odb_backend.h +1 -1
  60. {pygit2-1.15.1 → pygit2-1.17.0}/src/oid.c +1 -1
  61. {pygit2-1.15.1 → pygit2-1.17.0}/src/oid.h +1 -1
  62. {pygit2-1.15.1 → pygit2-1.17.0}/src/options.c +27 -70
  63. {pygit2-1.15.1 → pygit2-1.17.0}/src/options.h +7 -1
  64. {pygit2-1.15.1 → pygit2-1.17.0}/src/patch.c +1 -1
  65. {pygit2-1.15.1 → pygit2-1.17.0}/src/patch.h +1 -1
  66. {pygit2-1.15.1 → pygit2-1.17.0}/src/pygit2.c +3 -1
  67. {pygit2-1.15.1 → pygit2-1.17.0}/src/refdb.c +1 -1
  68. {pygit2-1.15.1 → pygit2-1.17.0}/src/refdb.h +1 -1
  69. {pygit2-1.15.1 → pygit2-1.17.0}/src/refdb_backend.c +1 -1
  70. {pygit2-1.15.1 → pygit2-1.17.0}/src/refdb_backend.h +1 -1
  71. {pygit2-1.15.1 → pygit2-1.17.0}/src/reference.c +1 -1
  72. {pygit2-1.15.1 → pygit2-1.17.0}/src/reference.h +1 -1
  73. {pygit2-1.15.1 → pygit2-1.17.0}/src/repository.c +6 -4
  74. {pygit2-1.15.1 → pygit2-1.17.0}/src/repository.h +1 -1
  75. {pygit2-1.15.1 → pygit2-1.17.0}/src/revspec.c +1 -1
  76. {pygit2-1.15.1 → pygit2-1.17.0}/src/revspec.h +1 -1
  77. {pygit2-1.15.1 → pygit2-1.17.0}/src/signature.c +1 -1
  78. {pygit2-1.15.1 → pygit2-1.17.0}/src/signature.h +1 -1
  79. {pygit2-1.15.1 → pygit2-1.17.0}/src/stash.c +1 -1
  80. {pygit2-1.15.1 → pygit2-1.17.0}/src/tag.c +1 -1
  81. {pygit2-1.15.1 → pygit2-1.17.0}/src/tree.c +1 -1
  82. {pygit2-1.15.1 → pygit2-1.17.0}/src/tree.h +1 -1
  83. {pygit2-1.15.1 → pygit2-1.17.0}/src/treebuilder.c +1 -1
  84. {pygit2-1.15.1 → pygit2-1.17.0}/src/treebuilder.h +1 -1
  85. {pygit2-1.15.1 → pygit2-1.17.0}/src/types.h +3 -3
  86. {pygit2-1.15.1 → pygit2-1.17.0}/src/utils.c +1 -1
  87. {pygit2-1.15.1 → pygit2-1.17.0}/src/utils.h +1 -1
  88. {pygit2-1.15.1 → pygit2-1.17.0}/src/walker.c +1 -1
  89. {pygit2-1.15.1 → pygit2-1.17.0}/src/walker.h +1 -1
  90. {pygit2-1.15.1 → pygit2-1.17.0}/src/worktree.c +1 -1
  91. {pygit2-1.15.1 → pygit2-1.17.0}/src/worktree.h +1 -1
  92. {pygit2-1.15.1 → pygit2-1.17.0}/test/__init__.py +1 -1
  93. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_apply_diff.py +1 -1
  94. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_archive.py +1 -1
  95. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_attributes.py +1 -1
  96. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_blame.py +1 -1
  97. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_blob.py +1 -1
  98. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_branch.py +1 -1
  99. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_branch_empty.py +1 -1
  100. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_cherrypick.py +1 -1
  101. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_commit.py +1 -1
  102. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_commit_gpg.py +1 -1
  103. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_commit_trailer.py +1 -1
  104. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_config.py +1 -1
  105. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_credentials.py +1 -1
  106. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_describe.py +1 -1
  107. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_diff.py +1 -1
  108. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_diff_binary.py +1 -1
  109. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_index.py +1 -1
  110. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_mailmap.py +1 -1
  111. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_merge.py +1 -1
  112. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_note.py +1 -1
  113. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_object.py +1 -1
  114. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_odb.py +1 -1
  115. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_odb_backend.py +1 -1
  116. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_oid.py +1 -1
  117. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_options.py +1 -1
  118. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_packbuilder.py +1 -1
  119. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_patch.py +1 -1
  120. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_patch_encoding.py +1 -1
  121. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_refdb_backend.py +1 -1
  122. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_refs.py +1 -1
  123. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_remote.py +31 -1
  124. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_remote_prune.py +1 -1
  125. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_remote_utf8.py +1 -1
  126. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_repository.py +69 -1
  127. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_repository_bare.py +1 -1
  128. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_repository_custom.py +1 -1
  129. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_repository_empty.py +1 -1
  130. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_revparse.py +1 -1
  131. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_revwalk.py +1 -1
  132. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_signature.py +1 -1
  133. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_status.py +1 -1
  134. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_submodule.py +1 -1
  135. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_tag.py +1 -1
  136. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_tree.py +1 -1
  137. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_treebuilder.py +1 -1
  138. {pygit2-1.15.1 → pygit2-1.17.0}/test/utils.py +1 -1
  139. pygit2-1.15.1/Makefile +0 -7
  140. {pygit2-1.15.1 → pygit2-1.17.0}/COPYING +0 -0
  141. {pygit2-1.15.1 → pygit2-1.17.0}/build_tag.py +0 -0
  142. {pygit2-1.15.1 → pygit2-1.17.0}/mypy-stubtest.ini +0 -0
  143. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/blob.py +0 -0
  144. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/attr.h +0 -0
  145. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/buffer.h +0 -0
  146. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/checkout.h +0 -0
  147. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/clone.h +0 -0
  148. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/commit.h +0 -0
  149. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/common.h +0 -0
  150. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/describe.h +0 -0
  151. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/diff.h +0 -0
  152. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/errors.h +0 -0
  153. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/graph.h +0 -0
  154. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/index.h +0 -0
  155. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/indexer.h +0 -0
  156. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/merge.h +0 -0
  157. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/net.h +0 -0
  158. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/oid.h +0 -0
  159. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/pack.h +0 -0
  160. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/proxy.h +0 -0
  161. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/refspec.h +0 -0
  162. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/revert.h +0 -0
  163. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/stash.h +0 -0
  164. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/strarray.h +0 -0
  165. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/submodule.h +0 -0
  166. {pygit2-1.15.1 → pygit2-1.17.0}/pygit2/decl/transport.h +0 -0
  167. {pygit2-1.15.1 → pygit2-1.17.0}/pytest.ini +0 -0
  168. {pygit2-1.15.1 → pygit2-1.17.0}/requirements-test.txt +0 -0
  169. {pygit2-1.15.1 → pygit2-1.17.0}/requirements.txt +0 -0
  170. {pygit2-1.15.1 → pygit2-1.17.0}/setup.cfg +0 -0
  171. {pygit2-1.15.1 → pygit2-1.17.0}/src/wildmatch.c +0 -0
  172. {pygit2-1.15.1 → pygit2-1.17.0}/src/wildmatch.h +0 -0
  173. {pygit2-1.15.1 → pygit2-1.17.0}/test/conftest.py +0 -0
  174. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/barerepo.zip +0 -0
  175. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/binaryfilerepo.zip +0 -0
  176. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/blameflagsrepo.zip +0 -0
  177. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/dirtyrepo.zip +0 -0
  178. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/emptyrepo.zip +0 -0
  179. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/encoding.zip +0 -0
  180. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/gpgsigned.zip +0 -0
  181. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/submodulerepo.zip +0 -0
  182. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/testrepo.zip +0 -0
  183. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/testrepoformerging.zip +0 -0
  184. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/testrepopacked.zip +0 -0
  185. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/trailerrepo.zip +0 -0
  186. {pygit2-1.15.1 → pygit2-1.17.0}/test/data/utf8branchrepo.zip +0 -0
  187. {pygit2-1.15.1 → pygit2-1.17.0}/test/keys/pygit2_empty +0 -0
  188. {pygit2-1.15.1 → pygit2-1.17.0}/test/keys/pygit2_empty.pub +0 -0
  189. {pygit2-1.15.1 → pygit2-1.17.0}/test/test_filter.py +0 -0
@@ -111,8 +111,10 @@ Authors:
111
111
  Kaarel Kitsemets
112
112
  Ken Dreyer
113
113
  Kevin KIN-FOO
114
+ Kyle Gottfried
114
115
  Marcel Waldvogel
115
116
  Masud Rahman
117
+ Mathieu Parent
116
118
  Michael Sondergaard
117
119
  Natanael Arndt
118
120
  Ondřej Nový
@@ -173,10 +175,12 @@ Authors:
173
175
  Jasper Lievisse Adriaanse
174
176
  Jimisola Laursen
175
177
  Jiri Benc
178
+ Johann Miller
176
179
  Jonathan Robson
177
180
  Josh Bleecher Snyder
178
181
  Julia Evans
179
182
  Justin Clift
183
+ Kevin Valk
180
184
  Konstantinos Smanis
181
185
  Kyriakos Oikonomakos
182
186
  Lance Eftink
@@ -184,16 +188,18 @@ Authors:
184
188
  Lukas Berk
185
189
  Martin von Zweigbergk
186
190
  Mathieu Bridon
187
- Mathieu Parent
188
191
  Mathieu Pillard
189
192
  Matthaus Woolard
193
+ Matěj Cepl
190
194
  Maxwell G
191
195
  Michał Górny
196
+ Na'aman Hirschfeld
192
197
  Nicolás Sanguinetti
193
198
  Nikita Kartashov
194
199
  Nikolai Zujev
195
200
  Nils Philippsen
196
201
  Noah Fontes
202
+ Or Hayat
197
203
  Óscar San José
198
204
  Patrick Lühne
199
205
  Paul Wagland
@@ -206,6 +212,7 @@ Authors:
206
212
  Rodrigo Bistolfi
207
213
  Ross Nicoll
208
214
  Rui Abreu Ferreira
215
+ Rui Chen
209
216
  Sandro Jäckel
210
217
  Saul Pwanson
211
218
  Shane Turner
@@ -215,6 +222,7 @@ Authors:
215
222
  Steven Winfield
216
223
  Tad Hardesty
217
224
  Timo Röhling
225
+ Victor Florea
218
226
  Vladimir Rutsky
219
227
  Wim Jeantine-Glenn
220
228
  Yu Jianjian
@@ -1,3 +1,46 @@
1
+ # 1.17.0 (2025-01-08)
2
+
3
+ - Upgrade to libgit2 1.9
4
+
5
+ - Add `certificate_check` callback to `Remote.ls_remotes(...)`
6
+ [#1326](https://github.com/libgit2/pygit2/pull/1326)
7
+
8
+ - Fix build with GCC 14
9
+ [#1324](https://github.com/libgit2/pygit2/pull/1324)
10
+
11
+ - Release wheels for PyPy
12
+ [#1336](https://github.com/libgit2/pygit2/pull/1336)
13
+ [#1339](https://github.com/libgit2/pygit2/pull/1339)
14
+
15
+ - CI: update tests for macOS to use OpenSSL 3
16
+ [#1335](https://github.com/libgit2/pygit2/pull/1335)
17
+
18
+ - Documentation: fix typo in `Repository.status(...)` docstring
19
+ [#1327](https://github.com/libgit2/pygit2/pull/1327)
20
+
21
+
22
+ # 1.16.0 (2024-10-11)
23
+
24
+ - Add support for Python 3.13
25
+
26
+ - Drop support for Python 3.9
27
+
28
+ - New `Repository.hashfile(...)`
29
+ [#1298](https://github.com/libgit2/pygit2/pull/1298)
30
+
31
+ - New `Option.GET_MWINDOW_FILE_LIMIT` and `Option.SET_MWINDOW_FILE_LIMIT`
32
+ [#1312](https://github.com/libgit2/pygit2/pull/1312)
33
+
34
+ - Fix overriding `certificate_check(...)` callback via argument to `RemoteCallbacks(...)`
35
+ [#1321](https://github.com/libgit2/pygit2/pull/1321)
36
+
37
+ - Add py.typed
38
+ [#1310](https://github.com/libgit2/pygit2/pull/1310)
39
+
40
+ - Fix `discover_repository(...)` annotation
41
+ [#1313](https://github.com/libgit2/pygit2/pull/1313)
42
+
43
+
1
44
  # 1.15.1 (2024-07-07)
2
45
 
3
46
  - New `Repository.revert(...)`
pygit2-1.17.0/Makefile ADDED
@@ -0,0 +1,7 @@
1
+ .PHONY: build html
2
+
3
+ build:
4
+ OPENSSL_VERSION=3.2.3 LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.0 sh build.sh
5
+
6
+ html: build
7
+ make -C docs html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pygit2
3
- Version: 1.15.1
3
+ Version: 1.17.0
4
4
  Summary: Python bindings for libgit2.
5
5
  Home-page: https://github.com/libgit2/pygit2
6
6
  Maintainer: J. David Ibáñez
@@ -14,23 +14,24 @@ Classifier: Development Status :: 5 - Production/Stable
14
14
  Classifier: Intended Audience :: Developers
15
15
  Classifier: Programming Language :: Python
16
16
  Classifier: Programming Language :: Python :: 3
17
- Classifier: Programming Language :: Python :: 3.9
18
17
  Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
20
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
21
  Classifier: Programming Language :: Python :: Implementation :: PyPy
22
22
  Classifier: Programming Language :: Python :: Implementation :: CPython
23
23
  Classifier: Topic :: Software Development :: Version Control
24
- Requires-Python: >=3.9
24
+ Classifier: Typing :: Typed
25
+ Requires-Python: >=3.10
25
26
  Description-Content-Type: text/markdown
26
27
  License-File: COPYING
27
28
  License-File: AUTHORS.md
28
- Requires-Dist: cffi>=1.16.0
29
+ Requires-Dist: cffi>=1.17.0
29
30
 
30
31
  # pygit2 - libgit2 bindings in Python
31
32
 
32
33
  Bindings to the libgit2 shared library, implements Git plumbing.
33
- Supports Python 3.9 to 3.12 and PyPy3 7.3+
34
+ Supports Python 3.10 to 3.13 and PyPy3 7.3+
34
35
 
35
36
  [![image](https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg)](https://github.com/libgit2/pygit2/actions/workflows/tests.yml)
36
37
 
@@ -47,8 +48,6 @@ Supports Python 3.9 to 3.12 and PyPy3 7.3+
47
48
 
48
49
  ## Sponsors
49
50
 
50
- - [Microsoft](https://github.com/microsoft)
51
-
52
51
  Add your name and link here, [become a
53
52
  sponsor](https://github.com/sponsors/jdavid).
54
53
 
@@ -1,7 +1,7 @@
1
1
  # pygit2 - libgit2 bindings in Python
2
2
 
3
3
  Bindings to the libgit2 shared library, implements Git plumbing.
4
- Supports Python 3.9 to 3.12 and PyPy3 7.3+
4
+ Supports Python 3.10 to 3.13 and PyPy3 7.3+
5
5
 
6
6
  [![image](https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg)](https://github.com/libgit2/pygit2/actions/workflows/tests.yml)
7
7
 
@@ -18,8 +18,6 @@ Supports Python 3.9 to 3.12 and PyPy3 7.3+
18
18
 
19
19
  ## Sponsors
20
20
 
21
- - [Microsoft](https://github.com/microsoft)
22
-
23
21
  Add your name and link here, [become a
24
22
  sponsor](https://github.com/sponsors/jdavid).
25
23
 
@@ -1,12 +1,11 @@
1
1
  Friends of pygit2:
2
2
 
3
- - [Microsoft](https://github.com/microsoft)
4
-
5
- Add your name to the list,
6
- [become a friend of pygit2](https://github.com/sponsors/jdavid).
3
+ - Add your name to the list,
4
+ [become a friend of pygit2](https://github.com/sponsors/jdavid).
7
5
 
8
6
  Past sponsors:
9
7
 
8
+ - [Microsoft](https://github.com/microsoft)
10
9
  - [Iterative](https://iterative.ai/)
11
10
  - [SourceHut](https://sourcehut.org)
12
11
  - [GitHub](https://github.com/github)
@@ -22,14 +22,14 @@
22
22
  #
23
23
  # sh build.sh
24
24
  #
25
- # Build libgit2 1.8.1 (will use libssh2 if available), then build pygit2
25
+ # Build libgit2 1.9.0 (will use libssh2 if available), then build pygit2
26
26
  # inplace:
27
27
  #
28
- # LIBGIT2_VERSION=1.8.1 sh build.sh
28
+ # LIBGIT2_VERSION=1.9.0 sh build.sh
29
29
  #
30
- # Build libssh2 1.11.0 and libgit2 1.8.1, then build pygit2 inplace:
30
+ # Build libssh2 1.11.1 and libgit2 1.9.0, then build pygit2 inplace:
31
31
  #
32
- # LIBSSH2_VERSION=1.11.0 LIBGIT2_VERSION=1.8.1 sh build.sh
32
+ # LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.0 sh build.sh
33
33
  #
34
34
  # Build inplace and run the tests:
35
35
  #
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -34,7 +34,7 @@ from pathlib import Path
34
34
  #
35
35
  # The version number of pygit2
36
36
  #
37
- __version__ = '1.15.1'
37
+ __version__ = '1.17.0'
38
38
 
39
39
 
40
40
  #
@@ -1,6 +1,6 @@
1
1
  from typing import Iterator, Literal, Optional, overload
2
2
  from io import IOBase
3
- from . import Index, Submodule
3
+ from . import Index
4
4
  from .enums import (
5
5
  ApplyLocation,
6
6
  BranchType,
@@ -558,7 +558,7 @@ class Worktree:
558
558
 
559
559
  def discover_repository(
560
560
  path: str, across_fs: bool = False, ceiling_dirs: str = ...
561
- ) -> str: ...
561
+ ) -> str | None: ...
562
562
  def hash(data: bytes) -> Oid: ...
563
563
  def hashfile(path: str) -> Oid: ...
564
564
  def init_file_backend(path: str, flags: int = 0) -> object: ...
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -113,12 +113,12 @@ class RemoteCallbacks(Payload):
113
113
  RemoteCallbacks(certificate=certificate).
114
114
  """
115
115
 
116
- def __init__(self, credentials=None, certificate=None):
116
+ def __init__(self, credentials=None, certificate_check=None):
117
117
  super().__init__()
118
118
  if credentials is not None:
119
119
  self.credentials = credentials
120
- if certificate is not None:
121
- self.certificate = certificate
120
+ if certificate_check is not None:
121
+ self.certificate_check = certificate_check
122
122
 
123
123
  def sideband_progress(self, string):
124
124
  """
@@ -344,7 +344,7 @@ def git_fetch_options(payload, opts=None):
344
344
  opts.callbacks.transfer_progress = C._transfer_progress_cb
345
345
  opts.callbacks.update_tips = C._update_tips_cb
346
346
  opts.callbacks.credentials = C._credentials_cb
347
- opts.callbacks.certificate_check = C._certificate_cb
347
+ opts.callbacks.certificate_check = C._certificate_check_cb
348
348
  # Payload
349
349
  handle = ffi.new_handle(payload)
350
350
  opts.callbacks.payload = handle
@@ -368,7 +368,7 @@ def git_push_options(payload, opts=None):
368
368
  opts.callbacks.transfer_progress = C._transfer_progress_cb
369
369
  opts.callbacks.update_tips = C._update_tips_cb
370
370
  opts.callbacks.credentials = C._credentials_cb
371
- opts.callbacks.certificate_check = C._certificate_cb
371
+ opts.callbacks.certificate_check = C._certificate_check_cb
372
372
  opts.callbacks.push_update_reference = C._push_update_reference_cb
373
373
  # Payload
374
374
  handle = ffi.new_handle(payload)
@@ -391,6 +391,7 @@ def git_remote_callbacks(payload):
391
391
  # Plug callbacks
392
392
  cdata.credentials = C._credentials_cb
393
393
  cdata.update_tips = C._update_tips_cb
394
+ cdata.certificate_check = C._certificate_check_cb
394
395
  # Payload
395
396
  handle = ffi.new_handle(payload)
396
397
  cdata.payload = handle
@@ -457,7 +458,7 @@ def libgit2_callback_void(f):
457
458
 
458
459
 
459
460
  @libgit2_callback
460
- def _certificate_cb(cert_i, valid, host, data):
461
+ def _certificate_check_cb(cert_i, valid, host, data):
461
462
  # We want to simulate what should happen if libgit2 supported pass-through
462
463
  # for this callback. For SSH, 'valid' is always False, because it doesn't
463
464
  # look at known_hosts, but we do want to let it through in order to do what
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -52,6 +52,9 @@ class ConfigIterator:
52
52
  def __iter__(self):
53
53
  return self
54
54
 
55
+ def __next__(self):
56
+ return self._next_entry()
57
+
55
58
  def _next_entry(self):
56
59
  centry = ffi.new('git_config_entry **')
57
60
  err = C.git_config_next(centry, self._iter)
@@ -59,12 +62,6 @@ class ConfigIterator:
59
62
 
60
63
  return ConfigEntry._from_c(centry[0], self)
61
64
 
62
- def next(self):
63
- return self.__next__()
64
-
65
- def __next__(self):
66
- return self._next_entry()
67
-
68
65
 
69
66
  class ConfigMultivarIterator(ConfigIterator):
70
67
  def __next__(self):
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -18,12 +18,15 @@ typedef struct git_blame_hunk {
18
18
  git_oid final_commit_id;
19
19
  size_t final_start_line_number;
20
20
  git_signature *final_signature;
21
+ git_signature *final_committer;
21
22
 
22
23
  git_oid orig_commit_id;
23
24
  const char *orig_path;
24
25
  size_t orig_start_line_number;
25
26
  git_signature *orig_signature;
27
+ git_signature *orig_committer;
26
28
 
29
+ const char *summary;
27
30
  char boundary;
28
31
  } git_blame_hunk;
29
32
 
@@ -1,4 +1,4 @@
1
- extern "Python" int _certificate_cb(
1
+ extern "Python" int _certificate_check_cb(
2
2
  git_cert *cert,
3
3
  int valid,
4
4
  const char *host,
@@ -18,7 +18,6 @@ typedef struct git_config_entry {
18
18
  const char *origin_path;
19
19
  unsigned int include_depth;
20
20
  git_config_level_t level;
21
- void (*free)(struct git_config_entry *entry);
22
21
  } git_config_entry;
23
22
 
24
23
  void git_config_entry_free(git_config_entry *);
@@ -48,6 +48,7 @@ struct git_remote_callbacks {
48
48
  git_remote_ready_cb remote_ready;
49
49
  void *payload;
50
50
  git_url_resolve_cb resolve_url;
51
+ int (*update_refs)(const char *refname, const git_oid *a, const git_oid *b, git_refspec *spec, void *data);
51
52
  };
52
53
 
53
54
  typedef struct {
@@ -83,6 +83,7 @@ int git_repository_set_head_detached(
83
83
  git_repository* repo,
84
84
  const git_oid* commitish);
85
85
 
86
+ int git_repository_hashfile(git_oid *out, git_repository *repo, const char *path, git_object_t type, const char *as_path);
86
87
  int git_repository_ident(const char **name, const char **email, const git_repository *repo);
87
88
  int git_repository_set_ident(git_repository *repo, const char *name, const char *email);
88
89
  int git_repository_index(git_index **out, git_repository *repo);
@@ -57,3 +57,14 @@ typedef enum {
57
57
  GIT_SUBMODULE_IGNORE_DIRTY = 3,
58
58
  GIT_SUBMODULE_IGNORE_ALL = 4,
59
59
  } git_submodule_ignore_t;
60
+
61
+ typedef enum {
62
+ GIT_OBJECT_ANY = ...,
63
+ GIT_OBJECT_INVALID = ...,
64
+ GIT_OBJECT_COMMIT = ...,
65
+ GIT_OBJECT_TREE = ...,
66
+ GIT_OBJECT_BLOB = ...,
67
+ GIT_OBJECT_TAG = ...,
68
+ GIT_OBJECT_OFS_DELTA = ...,
69
+ GIT_OBJECT_REF_DELTA = ...,
70
+ } git_object_t;
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -65,16 +65,16 @@ class BlameFlag(IntFlag):
65
65
  'Normal blame, the default'
66
66
 
67
67
  TRACK_COPIES_SAME_FILE = _pygit2.GIT_BLAME_TRACK_COPIES_SAME_FILE
68
- 'Not yet implemented and reserved for future use (as of libgit2 1.8.0).'
68
+ 'Not yet implemented and reserved for future use (as of libgit2 1.9.0).'
69
69
 
70
70
  TRACK_COPIES_SAME_COMMIT_MOVES = _pygit2.GIT_BLAME_TRACK_COPIES_SAME_COMMIT_MOVES
71
- 'Not yet implemented and reserved for future use (as of libgit2 1.8.0).'
71
+ 'Not yet implemented and reserved for future use (as of libgit2 1.9.0).'
72
72
 
73
73
  TRACK_COPIES_SAME_COMMIT_COPIES = _pygit2.GIT_BLAME_TRACK_COPIES_SAME_COMMIT_COPIES
74
- 'Not yet implemented and reserved for future use (as of libgit2 1.8.0).'
74
+ 'Not yet implemented and reserved for future use (as of libgit2 1.9.0).'
75
75
 
76
76
  TRACK_COPIES_ANY_COMMIT_COPIES = _pygit2.GIT_BLAME_TRACK_COPIES_ANY_COMMIT_COPIES
77
- 'Not yet implemented and reserved for future use (as of libgit2 1.8.0).'
77
+ 'Not yet implemented and reserved for future use (as of libgit2 1.9.0).'
78
78
 
79
79
  FIRST_PARENT = _pygit2.GIT_BLAME_FIRST_PARENT
80
80
  'Restrict the search of commits to those reachable following only the first parents.'
@@ -979,8 +979,8 @@ class Option(IntEnum):
979
979
  SET_PACK_MAX_OBJECTS = _pygit2.GIT_OPT_SET_PACK_MAX_OBJECTS
980
980
  DISABLE_PACK_KEEP_FILE_CHECKS = _pygit2.GIT_OPT_DISABLE_PACK_KEEP_FILE_CHECKS
981
981
  # ENABLE_HTTP_EXPECT_CONTINUE = _pygit2.GIT_OPT_ENABLE_HTTP_EXPECT_CONTINUE
982
- # GET_MWINDOW_FILE_LIMIT = _pygit2.GIT_OPT_GET_MWINDOW_FILE_LIMIT
983
- # SET_MWINDOW_FILE_LIMIT = _pygit2.GIT_OPT_SET_MWINDOW_FILE_LIMIT
982
+ GET_MWINDOW_FILE_LIMIT = _pygit2.GIT_OPT_GET_MWINDOW_FILE_LIMIT
983
+ SET_MWINDOW_FILE_LIMIT = _pygit2.GIT_OPT_SET_MWINDOW_FILE_LIMIT
984
984
  # SET_ODB_PACKED_PRIORITY = _pygit2.GIT_OPT_SET_ODB_PACKED_PRIORITY
985
985
  # SET_ODB_LOOSE_PRIORITY = _pygit2.GIT_OPT_SET_ODB_LOOSE_PRIORITY
986
986
  # GET_EXTENSIONS = _pygit2.GIT_OPT_GET_EXTENSIONS
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -467,8 +467,8 @@ class ConflictIterator:
467
467
  def __del__(self):
468
468
  C.git_index_conflict_iterator_free(self._iter)
469
469
 
470
- def next(self):
471
- return self.__next__()
470
+ def __iter__(self):
471
+ return self
472
472
 
473
473
  def __next__(self):
474
474
  cancestor = ffi.new('git_index_entry **')
@@ -486,6 +486,3 @@ class ConflictIterator:
486
486
  theirs = IndexEntry._from_c(ctheirs[0])
487
487
 
488
488
  return ancestor, ours, theirs
489
-
490
- def __iter__(self):
491
- return self
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -0,0 +1 @@
1
+ # python type marker, see: https://peps.python.org/pep-0561/
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -51,6 +51,7 @@ from .enums import (
51
51
  MergeFavor,
52
52
  MergeFileFlag,
53
53
  MergeFlag,
54
+ ObjectType,
54
55
  RepositoryOpenFlag,
55
56
  RepositoryState,
56
57
  )
@@ -129,6 +130,58 @@ class BaseRepository(_Repository):
129
130
 
130
131
  return builder.written_objects_count
131
132
 
133
+ def hashfile(
134
+ self,
135
+ path: str,
136
+ object_type: ObjectType = ObjectType.BLOB,
137
+ as_path: typing.Optional[str] = None,
138
+ ):
139
+ """Calculate the hash of a file using repository filtering rules.
140
+
141
+ If you simply want to calculate the hash of a file on disk with no filters,
142
+ you can just use `pygit2.hashfile()`. However, if you want to hash a file
143
+ in the repository and you want to apply filtering rules (e.g. crlf filters)
144
+ before generating the SHA, then use this function.
145
+
146
+ Note: if the repository has `core.safecrlf` set to fail and the filtering
147
+ triggers that failure, then this function will raise an error and not
148
+ calculate the hash of the file.
149
+
150
+ Returns: Output value of calculated SHA (Oid)
151
+
152
+ Parameters:
153
+
154
+ path
155
+ Path to file on disk whose contents should be hashed. This may be
156
+ an absolute path or a relative path, in which case it will be treated
157
+ as a path within the working directory.
158
+
159
+ object_type
160
+ The object type to hash (e.g. enums.ObjectType.BLOB)
161
+
162
+ as_path
163
+ The path to use to look up filtering rules. If this is an empty string
164
+ then no filters will be applied when calculating the hash.
165
+ If this is `None` and the `path` parameter is a file within the
166
+ repository's working directory, then the `path` will be used.
167
+ """
168
+ c_path = to_bytes(path)
169
+
170
+ if as_path is None:
171
+ c_as_path = ffi.NULL
172
+ else:
173
+ c_as_path = to_bytes(as_path)
174
+
175
+ c_oid = ffi.new('git_oid *')
176
+
177
+ err = C.git_repository_hashfile(
178
+ c_oid, self._repo, c_path, int(object_type), c_as_path
179
+ )
180
+ check_error(err)
181
+
182
+ oid = Oid(raw=bytes(ffi.buffer(c_oid.id)[:]))
183
+ return oid
184
+
132
185
  def __iter__(self):
133
186
  return iter(self.odb)
134
187
 
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,
@@ -1,4 +1,4 @@
1
- # Copyright 2010-2024 The pygit2 contributors
1
+ # Copyright 2010-2025 The pygit2 contributors
2
2
  #
3
3
  # This file is free software; you can redistribute it and/or modify
4
4
  # it under the terms of the GNU General Public License, version 2,