pygit2 1.18.2__tar.gz → 1.19.1__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 (200) hide show
  1. {pygit2-1.18.2 → pygit2-1.19.1}/AUTHORS.md +4 -3
  2. {pygit2-1.18.2 → pygit2-1.19.1}/CHANGELOG.md +82 -25
  3. pygit2-1.19.1/Makefile +7 -0
  4. {pygit2-1.18.2 → pygit2-1.19.1}/PKG-INFO +17 -13
  5. {pygit2-1.18.2 → pygit2-1.19.1}/README.md +13 -9
  6. pygit2-1.19.1/build.ps1 +21 -0
  7. {pygit2-1.18.2 → pygit2-1.19.1}/build.sh +12 -7
  8. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/__init__.py +3 -0
  9. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/_build.py +1 -1
  10. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/_libgit2/ffi.pyi +5 -0
  11. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/_pygit2.pyi +2 -2
  12. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/_run.py +1 -0
  13. pygit2-1.19.1/pygit2/decl/transaction.h +8 -0
  14. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/types.h +2 -0
  15. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/index.py +1 -7
  16. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/repository.py +18 -0
  17. pygit2-1.19.1/pygit2/transaction.py +199 -0
  18. pygit2-1.19.1/pyproject.toml +77 -0
  19. {pygit2-1.18.2 → pygit2-1.19.1}/requirements-test.txt +0 -2
  20. pygit2-1.19.1/requirements-typing.txt +2 -0
  21. pygit2-1.19.1/requirements-wheel.txt +1 -0
  22. {pygit2-1.18.2 → pygit2-1.19.1}/requirements.txt +1 -1
  23. {pygit2-1.18.2 → pygit2-1.19.1}/setup.py +5 -5
  24. {pygit2-1.18.2 → pygit2-1.19.1}/src/diff.c +5 -0
  25. {pygit2-1.18.2 → pygit2-1.19.1}/src/pygit2.c +4 -0
  26. {pygit2-1.18.2 → pygit2-1.19.1}/src/repository.c +23 -3
  27. {pygit2-1.18.2 → pygit2-1.19.1}/test/__init__.py +3 -2
  28. {pygit2-1.18.2 → pygit2-1.19.1}/test/conftest.py +0 -5
  29. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_diff.py +67 -22
  30. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_refs.py +4 -1
  31. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_repository.py +3 -1
  32. pygit2-1.19.1/test/test_transaction.py +327 -0
  33. {pygit2-1.18.2 → pygit2-1.19.1}/test/utils.py +13 -1
  34. pygit2-1.18.2/Makefile +0 -7
  35. pygit2-1.18.2/pyproject.toml +0 -42
  36. {pygit2-1.18.2 → pygit2-1.19.1}/COPYING +0 -0
  37. {pygit2-1.18.2 → pygit2-1.19.1}/SPONSORS.md +0 -0
  38. {pygit2-1.18.2 → pygit2-1.19.1}/build_tag.py +0 -0
  39. {pygit2-1.18.2 → pygit2-1.19.1}/mypy-stubtest.ini +0 -0
  40. {pygit2-1.18.2 → pygit2-1.19.1}/mypy.ini +0 -0
  41. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/blame.py +0 -0
  42. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/blob.py +0 -0
  43. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/branches.py +0 -0
  44. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/callbacks.py +0 -0
  45. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/config.py +0 -0
  46. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/credentials.py +0 -0
  47. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/attr.h +0 -0
  48. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/blame.h +0 -0
  49. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/buffer.h +0 -0
  50. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/callbacks.h +0 -0
  51. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/checkout.h +0 -0
  52. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/clone.h +0 -0
  53. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/commit.h +0 -0
  54. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/common.h +0 -0
  55. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/config.h +0 -0
  56. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/describe.h +0 -0
  57. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/diff.h +0 -0
  58. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/errors.h +0 -0
  59. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/graph.h +0 -0
  60. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/index.h +0 -0
  61. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/indexer.h +0 -0
  62. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/merge.h +0 -0
  63. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/net.h +0 -0
  64. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/oid.h +0 -0
  65. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/options.h +0 -0
  66. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/pack.h +0 -0
  67. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/proxy.h +0 -0
  68. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/refspec.h +0 -0
  69. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/remote.h +0 -0
  70. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/repository.h +0 -0
  71. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/revert.h +0 -0
  72. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/stash.h +0 -0
  73. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/strarray.h +0 -0
  74. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/submodule.h +0 -0
  75. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/decl/transport.h +0 -0
  76. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/enums.py +0 -0
  77. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/errors.py +0 -0
  78. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/ffi.py +0 -0
  79. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/filter.py +0 -0
  80. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/legacyenums.py +0 -0
  81. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/options.py +0 -0
  82. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/packbuilder.py +0 -0
  83. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/py.typed +0 -0
  84. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/references.py +0 -0
  85. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/refspec.py +0 -0
  86. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/remotes.py +0 -0
  87. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/settings.py +0 -0
  88. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/submodules.py +0 -0
  89. {pygit2-1.18.2 → pygit2-1.19.1}/pygit2/utils.py +0 -0
  90. {pygit2-1.18.2 → pygit2-1.19.1}/pytest.ini +0 -0
  91. {pygit2-1.18.2 → pygit2-1.19.1}/setup.cfg +0 -0
  92. {pygit2-1.18.2 → pygit2-1.19.1}/src/blob.c +0 -0
  93. {pygit2-1.18.2 → pygit2-1.19.1}/src/branch.c +0 -0
  94. {pygit2-1.18.2 → pygit2-1.19.1}/src/branch.h +0 -0
  95. {pygit2-1.18.2 → pygit2-1.19.1}/src/commit.c +0 -0
  96. {pygit2-1.18.2 → pygit2-1.19.1}/src/diff.h +0 -0
  97. {pygit2-1.18.2 → pygit2-1.19.1}/src/error.c +0 -0
  98. {pygit2-1.18.2 → pygit2-1.19.1}/src/error.h +0 -0
  99. {pygit2-1.18.2 → pygit2-1.19.1}/src/filter.c +0 -0
  100. {pygit2-1.18.2 → pygit2-1.19.1}/src/filter.h +0 -0
  101. {pygit2-1.18.2 → pygit2-1.19.1}/src/mailmap.c +0 -0
  102. {pygit2-1.18.2 → pygit2-1.19.1}/src/mailmap.h +0 -0
  103. {pygit2-1.18.2 → pygit2-1.19.1}/src/note.c +0 -0
  104. {pygit2-1.18.2 → pygit2-1.19.1}/src/note.h +0 -0
  105. {pygit2-1.18.2 → pygit2-1.19.1}/src/object.c +0 -0
  106. {pygit2-1.18.2 → pygit2-1.19.1}/src/object.h +0 -0
  107. {pygit2-1.18.2 → pygit2-1.19.1}/src/odb.c +0 -0
  108. {pygit2-1.18.2 → pygit2-1.19.1}/src/odb.h +0 -0
  109. {pygit2-1.18.2 → pygit2-1.19.1}/src/odb_backend.c +0 -0
  110. {pygit2-1.18.2 → pygit2-1.19.1}/src/odb_backend.h +0 -0
  111. {pygit2-1.18.2 → pygit2-1.19.1}/src/oid.c +0 -0
  112. {pygit2-1.18.2 → pygit2-1.19.1}/src/oid.h +0 -0
  113. {pygit2-1.18.2 → pygit2-1.19.1}/src/patch.c +0 -0
  114. {pygit2-1.18.2 → pygit2-1.19.1}/src/patch.h +0 -0
  115. {pygit2-1.18.2 → pygit2-1.19.1}/src/refdb.c +0 -0
  116. {pygit2-1.18.2 → pygit2-1.19.1}/src/refdb.h +0 -0
  117. {pygit2-1.18.2 → pygit2-1.19.1}/src/refdb_backend.c +0 -0
  118. {pygit2-1.18.2 → pygit2-1.19.1}/src/refdb_backend.h +0 -0
  119. {pygit2-1.18.2 → pygit2-1.19.1}/src/reference.c +0 -0
  120. {pygit2-1.18.2 → pygit2-1.19.1}/src/reference.h +0 -0
  121. {pygit2-1.18.2 → pygit2-1.19.1}/src/repository.h +0 -0
  122. {pygit2-1.18.2 → pygit2-1.19.1}/src/revspec.c +0 -0
  123. {pygit2-1.18.2 → pygit2-1.19.1}/src/revspec.h +0 -0
  124. {pygit2-1.18.2 → pygit2-1.19.1}/src/signature.c +0 -0
  125. {pygit2-1.18.2 → pygit2-1.19.1}/src/signature.h +0 -0
  126. {pygit2-1.18.2 → pygit2-1.19.1}/src/stash.c +0 -0
  127. {pygit2-1.18.2 → pygit2-1.19.1}/src/tag.c +0 -0
  128. {pygit2-1.18.2 → pygit2-1.19.1}/src/tree.c +0 -0
  129. {pygit2-1.18.2 → pygit2-1.19.1}/src/tree.h +0 -0
  130. {pygit2-1.18.2 → pygit2-1.19.1}/src/treebuilder.c +0 -0
  131. {pygit2-1.18.2 → pygit2-1.19.1}/src/treebuilder.h +0 -0
  132. {pygit2-1.18.2 → pygit2-1.19.1}/src/types.h +0 -0
  133. {pygit2-1.18.2 → pygit2-1.19.1}/src/utils.c +0 -0
  134. {pygit2-1.18.2 → pygit2-1.19.1}/src/utils.h +0 -0
  135. {pygit2-1.18.2 → pygit2-1.19.1}/src/walker.c +0 -0
  136. {pygit2-1.18.2 → pygit2-1.19.1}/src/walker.h +0 -0
  137. {pygit2-1.18.2 → pygit2-1.19.1}/src/wildmatch.c +0 -0
  138. {pygit2-1.18.2 → pygit2-1.19.1}/src/wildmatch.h +0 -0
  139. {pygit2-1.18.2 → pygit2-1.19.1}/src/worktree.c +0 -0
  140. {pygit2-1.18.2 → pygit2-1.19.1}/src/worktree.h +0 -0
  141. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/barerepo.zip +0 -0
  142. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/binaryfilerepo.zip +0 -0
  143. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/blameflagsrepo.zip +0 -0
  144. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/dirtyrepo.zip +0 -0
  145. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/emptyrepo.zip +0 -0
  146. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/encoding.zip +0 -0
  147. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/gpgsigned.zip +0 -0
  148. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/submodulerepo.zip +0 -0
  149. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/testrepo.zip +0 -0
  150. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/testrepoformerging.zip +0 -0
  151. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/testrepopacked.zip +0 -0
  152. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/trailerrepo.zip +0 -0
  153. {pygit2-1.18.2 → pygit2-1.19.1}/test/data/utf8branchrepo.zip +0 -0
  154. {pygit2-1.18.2 → pygit2-1.19.1}/test/keys/pygit2_empty +0 -0
  155. {pygit2-1.18.2 → pygit2-1.19.1}/test/keys/pygit2_empty.pub +0 -0
  156. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_apply_diff.py +0 -0
  157. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_archive.py +0 -0
  158. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_attributes.py +0 -0
  159. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_blame.py +0 -0
  160. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_blob.py +0 -0
  161. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_branch.py +0 -0
  162. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_branch_empty.py +0 -0
  163. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_cherrypick.py +0 -0
  164. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_commit.py +0 -0
  165. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_commit_gpg.py +0 -0
  166. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_commit_trailer.py +0 -0
  167. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_config.py +0 -0
  168. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_credentials.py +0 -0
  169. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_describe.py +0 -0
  170. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_diff_binary.py +0 -0
  171. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_filter.py +0 -0
  172. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_index.py +0 -0
  173. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_mailmap.py +0 -0
  174. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_merge.py +0 -0
  175. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_nonunicode.py +0 -0
  176. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_note.py +0 -0
  177. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_object.py +0 -0
  178. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_odb.py +0 -0
  179. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_odb_backend.py +0 -0
  180. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_oid.py +0 -0
  181. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_options.py +0 -0
  182. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_packbuilder.py +0 -0
  183. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_patch.py +0 -0
  184. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_patch_encoding.py +0 -0
  185. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_refdb_backend.py +0 -0
  186. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_remote.py +0 -0
  187. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_remote_prune.py +0 -0
  188. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_remote_utf8.py +0 -0
  189. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_repository_bare.py +0 -0
  190. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_repository_custom.py +0 -0
  191. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_repository_empty.py +0 -0
  192. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_revparse.py +0 -0
  193. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_revwalk.py +0 -0
  194. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_settings.py +0 -0
  195. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_signature.py +0 -0
  196. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_status.py +0 -0
  197. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_submodule.py +0 -0
  198. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_tag.py +0 -0
  199. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_tree.py +0 -0
  200. {pygit2-1.18.2 → pygit2-1.19.1}/test/test_treebuilder.py +0 -0
@@ -13,6 +13,7 @@ Authors:
13
13
  Dave Borowitz
14
14
  Brandon Milton
15
15
  Daniel Rodríguez Troitiño
16
+ Brendan Doherty
16
17
  Peter Rowlands
17
18
  Richo Healey
18
19
  Christian Boos
@@ -50,7 +51,7 @@ Authors:
50
51
  Mathieu Parent
51
52
  Michał Kępień
52
53
  Nicolas Dandrimont
53
- Raphael Medaer (Escaux)
54
+ Raphael Medaer
54
55
  Yaroslav Halchenko
55
56
  Anatoly Techtonik
56
57
  Andrew Olsen
@@ -64,6 +65,7 @@ Authors:
64
65
  Santiago Perez De Rosso
65
66
  Sebastian Thiel
66
67
  Thom Wiggers
68
+ WANG Xuerui
67
69
  William Manley
68
70
  Alexander Linne
69
71
  Alok Singhal
@@ -89,7 +91,6 @@ Authors:
89
91
  Sukhman Bhuller
90
92
  Thomas Kluyver
91
93
  Tyler Cipriani
92
- WANG Xuerui
93
94
  Alex Chamberlain
94
95
  Alexander Bayandin
95
96
  Amit Bakshi
@@ -98,6 +99,7 @@ Authors:
98
99
  Ben Davis
99
100
  CJ Steiner
100
101
  Colin Watson
102
+ Craig de Stigter
101
103
  Dan Yeaw
102
104
  Dustin Raimondi
103
105
  Eric Schrijver
@@ -156,7 +158,6 @@ Authors:
156
158
  Chris Rebert
157
159
  Christopher Hunt
158
160
  Claudio Jolowicz
159
- Craig de Stigter
160
161
  Cristian Hotea
161
162
  Cyril Jouve
162
163
  Dan Cecile
@@ -1,3 +1,52 @@
1
+ # 1.19.1 (2025-12-29)
2
+
3
+ - Update wheels to libgit2 1.9.2 and OpenSSL 3.5
4
+
5
+ - Fix: now diff's getitem/iter returns `None` for unchanged or binary files
6
+ [#1412](https://github.com/libgit2/pygit2/pull/1412)
7
+
8
+ - CI (macOS): arm, intel and pypy wheels (instead of universal)
9
+ [#1441](https://github.com/libgit2/pygit2/pull/1441)
10
+
11
+ - CI (pypy): fix tests
12
+ [#1437](https://github.com/libgit2/pygit2/pull/1437)
13
+
14
+
15
+ # 1.19.0 (2025-10-23)
16
+
17
+ - Add support for Python 3.14 and drop 3.10
18
+
19
+ - Support threaded builds (experimental)
20
+ [#1430](https://github.com/libgit2/pygit2/pull/1430)
21
+ [#1435](https://github.com/libgit2/pygit2/pull/1435)
22
+
23
+ - Add Linux musl wheels for AArch64
24
+
25
+ - Add Windows wheels for AArch64;
26
+ CI: build Windows wheels with cibuildwheel on GitHub
27
+ [#1423](https://github.com/libgit2/pygit2/pull/1423)
28
+
29
+ - New `Repository.transaction()` context manager, returns new `ReferenceTransaction`
30
+ [#1420](https://github.com/libgit2/pygit2/pull/1420)
31
+
32
+ - CI: add GitHub releases and other improvements
33
+ [#1433](https://github.com/libgit2/pygit2/pull/1433)
34
+ [#1432](https://github.com/libgit2/pygit2/pull/1432)
35
+ [#1425](https://github.com/libgit2/pygit2/pull/1425)
36
+ [#1431](https://github.com/libgit2/pygit2/pull/1431)
37
+
38
+ - Documentation improvements and other changes
39
+ [#1426](https://github.com/libgit2/pygit2/pull/1426)
40
+ [#1424](https://github.com/libgit2/pygit2/pull/1424)
41
+
42
+ Breaking changes:
43
+
44
+ - Remove deprecated `IndexEntry.hex`, use `str(entry.id)` instead of `entry.hex`
45
+
46
+ Deprecations:
47
+
48
+ - Deprecate `IndexEntry.oid`, use `entry.id` instead of `entry.oid`
49
+
1
50
  # 1.18.2 (2025-08-16)
2
51
 
3
52
  - Add support for almost all global options
@@ -298,31 +347,39 @@ Deprecations:
298
347
 
299
348
  # 1.14.0 (2024-01-26)
300
349
 
301
- - Drop support for Python 3.8
302
- - Add Linux wheels for musl on x86\_64
303
- [#1266](https://github.com/libgit2/pygit2/pull/1266)
304
- - New `Repository.submodules` namespace
305
- [#1250](https://github.com/libgit2/pygit2/pull/1250)
306
- - New `Repository.listall_mergeheads()`, `Repository.message`,
307
- `Repository.raw_message` and `Repository.remove_message()`
308
- [#1261](https://github.com/libgit2/pygit2/pull/1261)
309
- - New `pygit2.enums` supersedes the `GIT_` constants
310
- [#1251](https://github.com/libgit2/pygit2/pull/1251)
311
- - Now `Repository.status()`, `Repository.status_file()`,
312
- `Repository.merge_analysis()`, `DiffFile.flags`, `DiffFile.mode`,
313
- `DiffDelta.flags` and `DiffDelta.status` return enums
314
- [#1263](https://github.com/libgit2/pygit2/pull/1263)
315
- - Now repository\'s `merge()`, `merge_commits()` and `merge_trees()`
316
- take enums/flags for their `favor`, `flags` and `file_flags` arguments.
317
- [#1271](https://github.com/libgit2/pygit2/pull/1271)
318
- [#1272](https://github.com/libgit2/pygit2/pull/1272)
319
- - Fix crash in filter cleanup
320
- [#1259](https://github.com/libgit2/pygit2/pull/1259)
321
- - Documentation fixes
322
- [#1255](https://github.com/libgit2/pygit2/pull/1255)
323
- [#1258](https://github.com/libgit2/pygit2/pull/1258)
324
- [#1268](https://github.com/libgit2/pygit2/pull/1268)
325
- [#1270](https://github.com/libgit2/pygit2/pull/1270)
350
+ - Drop support for Python 3.8
351
+
352
+ - Add Linux wheels for musl on x86\_64
353
+ [#1266](https://github.com/libgit2/pygit2/pull/1266)
354
+
355
+ - New `Repository.submodules` namespace
356
+ [#1250](https://github.com/libgit2/pygit2/pull/1250)
357
+
358
+ - New `Repository.listall_mergeheads()`, `Repository.message`,
359
+ `Repository.raw_message` and `Repository.remove_message()`
360
+ [#1261](https://github.com/libgit2/pygit2/pull/1261)
361
+
362
+ - New `pygit2.enums` supersedes the `GIT_` constants
363
+ [#1251](https://github.com/libgit2/pygit2/pull/1251)
364
+
365
+ - Now `Repository.status()`, `Repository.status_file()`,
366
+ `Repository.merge_analysis()`, `DiffFile.flags`, `DiffFile.mode`,
367
+ `DiffDelta.flags` and `DiffDelta.status` return enums
368
+ [#1263](https://github.com/libgit2/pygit2/pull/1263)
369
+
370
+ - Now repository\'s `merge()`, `merge_commits()` and `merge_trees()`
371
+ take enums/flags for their `favor`, `flags` and `file_flags` arguments.
372
+ [#1271](https://github.com/libgit2/pygit2/pull/1271)
373
+ [#1272](https://github.com/libgit2/pygit2/pull/1272)
374
+
375
+ - Fix crash in filter cleanup
376
+ [#1259](https://github.com/libgit2/pygit2/pull/1259)
377
+
378
+ - Documentation fixes
379
+ [#1255](https://github.com/libgit2/pygit2/pull/1255)
380
+ [#1258](https://github.com/libgit2/pygit2/pull/1258)
381
+ [#1268](https://github.com/libgit2/pygit2/pull/1268)
382
+ [#1270](https://github.com/libgit2/pygit2/pull/1270)
326
383
 
327
384
  Breaking changes:
328
385
 
pygit2-1.19.1/Makefile ADDED
@@ -0,0 +1,7 @@
1
+ .PHONY: build html
2
+
3
+ build:
4
+ OPENSSL_VERSION=3.5.4 LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.2 sh build.sh
5
+
6
+ html: build
7
+ make -C docs html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pygit2
3
- Version: 1.18.2
3
+ Version: 1.19.1
4
4
  Summary: Python bindings for libgit2.
5
5
  Home-page: https://github.com/libgit2/pygit2
6
6
  Maintainer: J. David Ibáñez
@@ -14,19 +14,19 @@ 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.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
20
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
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
24
  Classifier: Typing :: Typed
25
- Requires-Python: >=3.10
25
+ Requires-Python: >=3.11
26
26
  Description-Content-Type: text/markdown
27
27
  License-File: COPYING
28
28
  License-File: AUTHORS.md
29
- Requires-Dist: cffi>=1.17.0
29
+ Requires-Dist: cffi>=2.0
30
30
  Dynamic: classifier
31
31
  Dynamic: description
32
32
  Dynamic: description-content-type
@@ -44,20 +44,24 @@ Dynamic: summary
44
44
  # pygit2 - libgit2 bindings in Python
45
45
 
46
46
  Bindings to the libgit2 shared library, implements Git plumbing.
47
- Supports Python 3.10 to 3.13 and PyPy3 7.3+
47
+ Supports Python 3.11 to 3.14 and PyPy3 7.3+
48
48
 
49
- [![image](https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg)](https://github.com/libgit2/pygit2/actions/workflows/tests.yml)
49
+ [![test-ci-badge][test-ci-badge]][test-ci-link]
50
+ [![deploy-ci-badge][deploy-ci-badge]][deploy-ci-link]
50
51
 
51
- [![image](https://ci.appveyor.com/api/projects/status/edmwc0dctk5nacx0/branch/master?svg=true)](https://ci.appveyor.com/project/jdavid/pygit2/branch/master)
52
+ [deploy-ci-badge]: https://github.com/libgit2/pygit2/actions/workflows/wheels.yml/badge.svg
53
+ [deploy-ci-link]: https://github.com/libgit2/pygit2/actions/workflows/wheels.yml
54
+ [test-ci-badge]: https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg
55
+ [test-ci-link]: https://github.com/libgit2/pygit2/actions/workflows/tests.yml
52
56
 
53
57
  ## Links
54
58
 
55
- - Documentation - <https://www.pygit2.org/>
56
- - Install - <https://www.pygit2.org/install.html>
57
- - Download - <https://pypi.org/project/pygit2/>
58
- - Source code and issue tracker - <https://github.com/libgit2/pygit2>
59
- - Changelog - <https://github.com/libgit2/pygit2/blob/master/CHANGELOG.md>
60
- - Authors - <https://github.com/libgit2/pygit2/blob/master/AUTHORS.md>
59
+ - Documentation - <https://www.pygit2.org/>
60
+ - Install - <https://www.pygit2.org/install.html>
61
+ - Download - <https://pypi.org/project/pygit2/>
62
+ - Source code and issue tracker - <https://github.com/libgit2/pygit2>
63
+ - Changelog - <https://github.com/libgit2/pygit2/blob/master/CHANGELOG.md>
64
+ - Authors - <https://github.com/libgit2/pygit2/blob/master/AUTHORS.md>
61
65
 
62
66
  ## Sponsors
63
67
 
@@ -1,20 +1,24 @@
1
1
  # pygit2 - libgit2 bindings in Python
2
2
 
3
3
  Bindings to the libgit2 shared library, implements Git plumbing.
4
- Supports Python 3.10 to 3.13 and PyPy3 7.3+
4
+ Supports Python 3.11 to 3.14 and PyPy3 7.3+
5
5
 
6
- [![image](https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg)](https://github.com/libgit2/pygit2/actions/workflows/tests.yml)
6
+ [![test-ci-badge][test-ci-badge]][test-ci-link]
7
+ [![deploy-ci-badge][deploy-ci-badge]][deploy-ci-link]
7
8
 
8
- [![image](https://ci.appveyor.com/api/projects/status/edmwc0dctk5nacx0/branch/master?svg=true)](https://ci.appveyor.com/project/jdavid/pygit2/branch/master)
9
+ [deploy-ci-badge]: https://github.com/libgit2/pygit2/actions/workflows/wheels.yml/badge.svg
10
+ [deploy-ci-link]: https://github.com/libgit2/pygit2/actions/workflows/wheels.yml
11
+ [test-ci-badge]: https://github.com/libgit2/pygit2/actions/workflows/tests.yml/badge.svg
12
+ [test-ci-link]: https://github.com/libgit2/pygit2/actions/workflows/tests.yml
9
13
 
10
14
  ## Links
11
15
 
12
- - Documentation - <https://www.pygit2.org/>
13
- - Install - <https://www.pygit2.org/install.html>
14
- - Download - <https://pypi.org/project/pygit2/>
15
- - Source code and issue tracker - <https://github.com/libgit2/pygit2>
16
- - Changelog - <https://github.com/libgit2/pygit2/blob/master/CHANGELOG.md>
17
- - Authors - <https://github.com/libgit2/pygit2/blob/master/AUTHORS.md>
16
+ - Documentation - <https://www.pygit2.org/>
17
+ - Install - <https://www.pygit2.org/install.html>
18
+ - Download - <https://pypi.org/project/pygit2/>
19
+ - Source code and issue tracker - <https://github.com/libgit2/pygit2>
20
+ - Changelog - <https://github.com/libgit2/pygit2/blob/master/CHANGELOG.md>
21
+ - Authors - <https://github.com/libgit2/pygit2/blob/master/AUTHORS.md>
18
22
 
19
23
  ## Sponsors
20
24
 
@@ -0,0 +1,21 @@
1
+ if (!(Test-Path -Path "build")) {
2
+ # in case the pygit2 package build/ workspace has not been created by cibuildwheel yet
3
+ mkdir build
4
+ }
5
+ if (Test-Path -Path "$env:LIBGIT2_SRC") {
6
+ Set-Location "$env:LIBGIT2_SRC"
7
+ # for local runs, reuse build/libgit_src if it exists
8
+ if (Test-Path -Path build) {
9
+ # purge previous build env (likely for a different arch type)
10
+ Remove-Item -Recurse -Force build
11
+ }
12
+ # ensure we are checked out to the right version
13
+ git fetch --depth=1 --tags
14
+ git checkout "v$env:LIBGIT2_VERSION"
15
+ } else {
16
+ # from a fresh run (like in CI)
17
+ git clone --depth=1 -b "v$env:LIBGIT2_VERSION" https://github.com/libgit2/libgit2.git $env:LIBGIT2_SRC
18
+ Set-Location "$env:LIBGIT2_SRC"
19
+ }
20
+ cmake -B build -S . -DBUILD_TESTS=OFF
21
+ cmake --build build/ --config=Release --target install
@@ -22,14 +22,14 @@
22
22
  #
23
23
  # sh build.sh
24
24
  #
25
- # Build libgit2 1.9.0 (will use libssh2 if available), then build pygit2
25
+ # Build libgit2 1.9.2 (will use libssh2 if available), then build pygit2
26
26
  # inplace:
27
27
  #
28
- # LIBGIT2_VERSION=1.9.0 sh build.sh
28
+ # LIBGIT2_VERSION=1.9.2 sh build.sh
29
29
  #
30
- # Build libssh2 1.11.1 and libgit2 1.9.0, then build pygit2 inplace:
30
+ # Build libssh2 1.11.1 and libgit2 1.9.2, then build pygit2 inplace:
31
31
  #
32
- # LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.0 sh build.sh
32
+ # LIBSSH2_VERSION=1.11.1 LIBGIT2_VERSION=1.9.2 sh build.sh
33
33
  #
34
34
  # Build inplace and run the tests:
35
35
  #
@@ -62,6 +62,8 @@ if [ "$CIBUILDWHEEL" = "1" ]; then
62
62
  apt-get install wget -y
63
63
  if [ -z "$OPENSSL_VERSION" ]; then
64
64
  apt-get install libssl-dev -y
65
+ else
66
+ apt-get install libtime-piece-perl -y
65
67
  fi
66
68
  elif [ -f /usr/bin/yum ]; then
67
69
  yum install wget zlib-devel -y
@@ -70,11 +72,14 @@ if [ "$CIBUILDWHEEL" = "1" ]; then
70
72
  else
71
73
  yum install perl-IPC-Cmd -y
72
74
  yum install perl-Pod-Html -y
75
+ yum install perl-Time-Piece -y
73
76
  fi
74
77
  elif [ -f /sbin/apk ]; then
75
78
  apk add wget
76
79
  if [ -z "$OPENSSL_VERSION" ]; then
77
- apk add openssl-dev
80
+ apk add --no-cache openssl-dev
81
+ else
82
+ apk add --no-cache perl
78
83
  fi
79
84
  fi
80
85
  rm -rf ci
@@ -134,7 +139,7 @@ if [ -n "$OPENSSL_VERSION" ]; then
134
139
  # Linux
135
140
  tar xf $FILENAME.tar.gz
136
141
  cd $FILENAME
137
- ./Configure shared --prefix=$PREFIX --libdir=$PREFIX/lib
142
+ ./Configure shared no-apps no-docs no-tests --prefix=$PREFIX --libdir=$PREFIX/lib
138
143
  make
139
144
  make install
140
145
  OPENSSL_PREFIX=$(pwd)
@@ -268,7 +273,7 @@ if [ "$1" = "mypy" ]; then
268
273
  if [ -n "$WHEELDIR" ]; then
269
274
  $PREFIX/bin/pip install $WHEELDIR/pygit2*-$PYTHON_TAG-*.whl
270
275
  fi
271
- $PREFIX/bin/pip install -r requirements-test.txt
276
+ $PREFIX/bin/pip install -r requirements-test.txt -r requirements-typing.txt
272
277
  $PREFIX/bin/mypy pygit2 test
273
278
  fi
274
279
 
@@ -366,6 +366,7 @@ from .remotes import Remote
366
366
  from .repository import Repository
367
367
  from .settings import Settings
368
368
  from .submodules import Submodule
369
+ from .transaction import ReferenceTransaction
369
370
  from .utils import to_bytes, to_str
370
371
 
371
372
  # Features
@@ -971,6 +972,8 @@ __all__ = (
971
972
  'Settings',
972
973
  'submodules',
973
974
  'Submodule',
975
+ 'transaction',
976
+ 'ReferenceTransaction',
974
977
  'utils',
975
978
  'to_bytes',
976
979
  'to_str',
@@ -34,7 +34,7 @@ from pathlib import Path
34
34
  #
35
35
  # The version number of pygit2
36
36
  #
37
- __version__ = '1.18.2'
37
+ __version__ = '1.19.1'
38
38
 
39
39
 
40
40
  #
@@ -239,12 +239,17 @@ class GitRemoteC:
239
239
  class GitReferenceC:
240
240
  pass
241
241
 
242
+ class GitTransactionC:
243
+ pass
244
+
242
245
  def string(a: char_pointer) -> bytes: ...
243
246
  @overload
244
247
  def new(a: Literal['git_repository **']) -> _Pointer[GitRepositoryC]: ...
245
248
  @overload
246
249
  def new(a: Literal['git_remote **']) -> _Pointer[GitRemoteC]: ...
247
250
  @overload
251
+ def new(a: Literal['git_transaction **']) -> _Pointer[GitTransactionC]: ...
252
+ @overload
248
253
  def new(a: Literal['git_repository_init_options *']) -> GitRepositoryInitOptionsC: ...
249
254
  @overload
250
255
  def new(a: Literal['git_submodule_update_options *']) -> GitSubmoduleUpdateOptionsC: ...
@@ -432,8 +432,8 @@ class Diff:
432
432
  def from_c(diff, repo) -> Diff: ...
433
433
  @staticmethod
434
434
  def parse_diff(git_diff: str | bytes) -> Diff: ...
435
- def __getitem__(self, index: int) -> Patch: ... # Diff_getitem
436
- def __iter__(self) -> Iterator[Patch]: ... # -> DiffIter
435
+ def __getitem__(self, index: int) -> Patch | None: ... # Diff_getitem
436
+ def __iter__(self) -> Iterator[Patch | None]: ... # -> DiffIter
437
437
  def __len__(self) -> int: ...
438
438
 
439
439
  class DiffDelta:
@@ -81,6 +81,7 @@ h_files = [
81
81
  'revert.h',
82
82
  'stash.h',
83
83
  'submodule.h',
84
+ 'transaction.h',
84
85
  'options.h',
85
86
  'callbacks.h', # Bridge from libgit2 to Python
86
87
  ]
@@ -0,0 +1,8 @@
1
+ int git_transaction_new(git_transaction **out, git_repository *repo);
2
+ int git_transaction_lock_ref(git_transaction *tx, const char *refname);
3
+ int git_transaction_set_target(git_transaction *tx, const char *refname, const git_oid *target, const git_signature *sig, const char *msg);
4
+ int git_transaction_set_symbolic_target(git_transaction *tx, const char *refname, const char *target, const git_signature *sig, const char *msg);
5
+ int git_transaction_set_reflog(git_transaction *tx, const char *refname, const git_reflog *reflog);
6
+ int git_transaction_remove(git_transaction *tx, const char *refname);
7
+ int git_transaction_commit(git_transaction *tx);
8
+ void git_transaction_free(git_transaction *tx);
@@ -12,6 +12,8 @@ typedef struct git_submodule git_submodule;
12
12
  typedef struct git_transport git_transport;
13
13
  typedef struct git_tree git_tree;
14
14
  typedef struct git_packbuilder git_packbuilder;
15
+ typedef struct git_transaction git_transaction;
16
+ typedef struct git_reflog git_reflog;
15
17
 
16
18
  typedef int64_t git_off_t;
17
19
  typedef int64_t git_time_t;
@@ -446,15 +446,9 @@ class IndexEntry:
446
446
 
447
447
  @property
448
448
  def oid(self):
449
- # For backwards compatibility
449
+ warnings.warn('Use entry.id', DeprecationWarning)
450
450
  return self.id
451
451
 
452
- @property
453
- def hex(self):
454
- """The id of the referenced object as a hex string"""
455
- warnings.warn('Use str(entry.id)', DeprecationWarning)
456
- return str(self.id)
457
-
458
452
  def __str__(self):
459
453
  return f'<path={self.path} id={self.id} mode={self.mode}>'
460
454
 
@@ -78,6 +78,7 @@ from .packbuilder import PackBuilder
78
78
  from .references import References
79
79
  from .remotes import RemoteCollection
80
80
  from .submodules import SubmoduleCollection
81
+ from .transaction import ReferenceTransaction
81
82
  from .utils import StrArray, to_bytes
82
83
 
83
84
  if TYPE_CHECKING:
@@ -120,6 +121,7 @@ class BaseRepository(_Repository):
120
121
  self.references = References(self)
121
122
  self.remotes = RemoteCollection(self)
122
123
  self.submodules = SubmoduleCollection(self)
124
+ self._active_transaction = None
123
125
 
124
126
  # Get the pointer as the contents of a buffer and store it for
125
127
  # later access
@@ -359,6 +361,22 @@ class BaseRepository(_Repository):
359
361
 
360
362
  return (commit, reference) # type: ignore
361
363
 
364
+ def transaction(self) -> ReferenceTransaction:
365
+ """Create a new reference transaction.
366
+
367
+ Returns a context manager that commits all reference updates atomically
368
+ when the context exits successfully, or performs no updates if an exception
369
+ is raised.
370
+
371
+ Example::
372
+
373
+ with repo.transaction() as txn:
374
+ txn.lock_ref('refs/heads/master')
375
+ txn.set_target('refs/heads/master', new_oid, message='Update')
376
+ """
377
+ txn = ReferenceTransaction(self)
378
+ return txn
379
+
362
380
  #
363
381
  # Checkout
364
382
  #