-
Fix refcount and error handling issues in
filter_register(...) -
New
Repository.load_filter_list(...)andFilterList#1444 -
New
Odb.read_header(...)and nowOdb.read(...)returnsenums.ObjectTypeinstead of int #1450
-
Update wheels to libgit2 1.9.2 and OpenSSL 3.5
-
Fix: now diff's getitem/iter returns
Nonefor unchanged or binary files #1412 -
CI (macOS): arm, intel and pypy wheels (instead of universal) #1441
-
CI (pypy): fix tests #1437
-
Add support for Python 3.14 and drop 3.10
-
Add Linux musl wheels for AArch64
-
Add Windows wheels for AArch64; CI: build Windows wheels with cibuildwheel on GitHub #1423
-
New
Repository.transaction()context manager, returns newReferenceTransaction#1420 -
CI: add GitHub releases and other improvements #1433 #1432 #1425 #1431
Breaking changes:
- Remove deprecated
IndexEntry.hex, usestr(entry.id)instead ofentry.hex
Deprecations:
- Deprecate
IndexEntry.oid, useentry.idinstead ofentry.oid
-
Add support for almost all global options #1409
-
Now it's possible to set
Submodule.url = url#1395 -
New
RemoteCallbacks.push_negotiation(...)#1396 -
New optional boolean argument
connectinRemote.ls_remotes(...)#1396 -
New
Remote.list_heads(...)returns a list ofRemoteHeadobjects #1397 #1410 -
Documentation fixes #1388
-
Typing improvements #1387 #1389 #1390 #1391 #1392 #1393 #1394 #1398 #1399 #1400 #1402 #1403 #1406 #1407 #1408
Deprecations:
-
Remote.ls_remotes(...)is deprecated, useRemote.list_heads(...):# Before for head in remote.ls_remotes(): head['name'] head['oid'] head['loid'] # None when local is False head['local'] head['symref_target'] # Now for head in remote.list_heads(): head.name head.oid head.loid # The zero oid when local is False head.local head.symref_target
-
Update wheels to libgit2 1.9.1 and OpenSSL 3.3
-
New
Index.remove_directory(...)#1377 -
New
Index.add_conflict(...)#1382 -
Now
Repository.merge_file_from_index(...)returns aMergeFileResultobject when called withuse_deprecated=False#1376
Deprecations:
-
Update your code:
# Before contents = Repository.merge_file_from_index(...) # Now result = Repository.merge_file_from_index(..., use_deprecated=False) contents = result.contentsAt some point in the future
use_deprecated=Falsewill be the default.
-
Upgrade Linux Glibc wheels to
manylinux_2_28 -
Add
RemoteCallbacks.push_transfer_progress(...)callback #1345 -
New
bool(oid)#1347 -
Now
Repository.merge(...)accepts a commit or reference object #1348 -
New
threadsoptional argument inRemote.push(...)#1352 -
New
proxyoptional argument inclone_repository(...)#1354 -
New optional arguments
context_linesandinterhunk_linesinBlob.diff(...); and nowRepository.diff(...)honors these two arguments when the objects diffed are blobs. #1360 -
Now
Tree.diff_to_workdir(...)accepts keyword arguments, not just positional. -
Fix when a reference name has non UTF-8 chars #1329
-
Fix condition check in
Repository.remotes.rename(...)#1342 -
Add codespell workflow, fix a number of typos #1344
-
CI: Use ARM runner for tests and wheels #1346
Deprecations:
- Passing str to
Repository.merge(...)is deprecated, instead pass an oid object (or a commit, or a reference) #1349
Breaking changes:
- Keyword argument
flaghas been renamed toflagsinBlob.diff(...)andBlob.diff_to_buffer(...)
-
Upgrade to libgit2 1.9
-
Add
certificate_checkcallback toRemote.ls_remotes(...)#1326 -
Fix build with GCC 14 #1324
-
CI: update tests for macOS to use OpenSSL 3 #1335
-
Documentation: fix typo in
Repository.status(...)docstring #1327
-
Add support for Python 3.13
-
Drop support for Python 3.9
-
New
Repository.hashfile(...)#1298 -
New
Option.GET_MWINDOW_FILE_LIMITandOption.SET_MWINDOW_FILE_LIMIT#1312 -
Fix overriding
certificate_check(...)callback via argument toRemoteCallbacks(...)#1321 -
Add py.typed #1310
-
Fix
discover_repository(...)annotation #1313
-
New
Repository.revert(...)#1297 -
New optional
depthargument in submodulesadd()andupdate()methods #1296 -
Now
Submodule.urlreturnsNonewhen the submodule does not have a url #1294 -
Fix use after free bug in error reporting #1299
-
Fix
Submodule.head_idwhen the submodule is not in the current HEAD tree #1300 -
Fix
Submodule.open()when subclassingRepository#1295 -
Fix error in the test suite when running with address sanitizer #1304 #1301
-
Annotations and documentation fixes #1293
-
Many deprecated features have been removed, see below
-
Upgrade to libgit2 v1.8.1
-
New
push_optionsoptional argument inRepository.push(...)#1282 -
New support comparison of
Oidwith text string -
Fix
CheckoutNotify.IGNORED#1288 -
Use default error handler when decoding/encoding paths #537
-
Remove setuptools runtime dependency #1281
-
Coding style with ruff #1280
-
Add wheels for ppc64le #1279
-
Fix tests on EPEL8 builds for s390x #1283
Deprecations:
- Deprecate
IndexEntry.hex, usestr(IndexEntry.id)
Breaking changes:
-
Remove deprecated
oid.hex, usestr(oid) -
Remove deprecated
object.hex, usestr(object.id) -
Remove deprecated
object.oid, useobject.id -
Remove deprecated
Repository.add_submodule(...), useRepository.submodules.add(...) -
Remove deprecated
Repository.lookup_submodule(...), useRepository.submodules[...] -
Remove deprecated
Repository.init_submodules(...), useRepository.submodules.init(...) -
Remove deprecated
Repository.update_submodule(...), useRepository.submodules.update(...) -
Remove deprecated constants
GIT_OBJ_XXX, useObjectType -
Remove deprecated constants
GIT_REVPARSE_XXX, useRevSpecFlag -
Remove deprecated constants
GIT_REF_XXX, useReferenceType -
Remove deprecated
ReferenceType.OID, use insteadReferenceType.DIRECT -
Remove deprecated
ReferenceType.LISTALL, use insteadReferenceType.ALL -
Remove deprecated support for passing dicts to repository's
merge(...),merge_commits(...)andmerge_trees(...). Instead passMergeFlagforflags, andMergeFileFlagforfile_flags. -
Remove deprecated support for passing a string for the favor argument to repository's
merge(...),merge_commits(...)andmerge_trees(...). Instead passMergeFavor.
-
Update wheels to libgit2 v1.7.2
-
Now
Object.filemodereturnsenums.FileModeandReference.typereturnsenums.ReferenceType#1273 -
Fix tests on Fedora 40 #1275
Deprecations:
- Deprecate
ReferenceType.OID, useReferenceType.DIRECT - Deprecate
ReferenceType.LISTALL, useReferenceType.ALL
-
Drop support for Python 3.8
-
Add Linux wheels for musl on x86_64 #1266
-
New
Repository.submodulesnamespace #1250 -
New
Repository.listall_mergeheads(),Repository.message,Repository.raw_messageandRepository.remove_message()#1261 -
New
pygit2.enumssupersedes theGIT_constants #1251 -
Now
Repository.status(),Repository.status_file(),Repository.merge_analysis(),DiffFile.flags,DiffFile.mode,DiffDelta.flagsandDiffDelta.statusreturn enums #1263 -
Now repository's
merge(),merge_commits()andmerge_trees()take enums/flags for theirfavor,flagsandfile_flagsarguments. #1271 #1272 -
Fix crash in filter cleanup #1259
Breaking changes:
- Remove deprecated
Repository.create_remote(...)function, use insteadRepository.remotes.create(...)
Deprecations:
-
Deprecate
Repository.add_submodule(...), useRepository.submodules.add(...) -
Deprecate
Repository.lookup_submodule(...), useRepository.submodules[...] -
Deprecate
Repository.init_submodules(...), useRepository.submodules.init(...) -
Deprecate
Repository.update_submodule(...), useRepository.submodules.update(...) -
Deprecate
GIT_*constants, usepygit2.enums -
Passing dicts to repository's
merge(...),merge_commits(...)andmerge_trees(...)is deprecated. Instead passMergeFlagfor theflagsargument, andMergeFileFlagforfile_flags. -
Passing a string for the favor argument to repository's
merge(...),merge_commits(...)andmerge_trees(...)is deprecated. Instead passMergeFavor.
- New API for filters in Python #1237 #1244
- Shallow repositories: New
depthoptional argument forclone_repository(...)andRemote.fetch(...)#1245 #1246 - New submodule
init(...),update(...)andreload(...)functions #1248 - Release GIL in
Walker.__next__#1249 - Type hints for submodule functions in
Repository#1247
- Support Python 3.12
- Documentation updates #1242
- Fix crash in reference rename #1233
- Upgrade to libgit2 v1.7.1
- Don't distribute wheels for pypy, only universal wheels for macOS
- New
Repository.remotes.create_anonymous(url)#1229 - docs: update links to pypi, pygit2.org #1228
- Prep work for Python 3.12 (not yet supported) #1223
- Update wheels to bundle libssh2 1.11.0 and OpenSSL 3.0.9
- Remove obsolete
Remote.save()#1219
- Fix segfault in signature when encoding is incorrect #1210
- Typing improvements #1212 #1214
- Update wheels to libgit2 v1.6.4
- Upgrade to libgit2 v1.6.3
- Update Linux wheels to bundle OpenSSL 3.0.8
- Downgrade Linux wheels to manylinux2014
- New
ConflictCollection.__contains__#1181 - New
Repository.references.iterator(...)#1191 - New
favor,flagsandfile_flagsoptional arguments forRepository.merge(...)#1192 - New
keep_allandpathsoptional arguments forRepository.stash(...)#1202 - New
Repository.state()#1204 - Improve
Repository.write_archive(...)performance #1183 - Sync type annotations #1203
- Fix Linux wheels, downgrade to manylinux 2_24 #1176
- Windows wheels for Python 3.11 #1177
- CI: Use 3.11 final release for testing #1178
- Drop support for Python 3.7
- Update Linux wheels to manylinux 2_28 #1136
- Fix crash in signature representation #1162
- Fix memory leak in
Signature#1173 - New optional argument
raise_errorinRepository.applies(...)#1166 - New notify/progress callbacks for checkout and stash #1167 #1169
- New
Repository.remotes.names()#1159 - Now
refnameargument inRemoteCallbacks.push_update_reference(...)is a string, not bytes #1168 - Add missing newline at end of
pygit2/decl/pack.h#1163
- Upgrade to libgit2 1.5
- Add support for
GIT_OPT_GET_OWNER_VALIDATIONandGIT_OPT_SET_OWNER_VALIDATION#1150 - New
untracked_filesandignoredoptional arguments forRepository.status(...)#1151
- New
Repository.create_commit_string(...)andRepository.create_commit_with_signature(...)#1142 - Linux and macOS wheels updated to libgit2 v1.4.3
- Remove redundant line #1139
- Type hints: added to C code and Branches/References #1121 #1132
- New
Signaturesupportsstr()andrepr()#1135 - Fix ODB backend's read in big endian architectures #1130
- Fix install with poetry #1129 #1128
- Wheels: update to libgit2 v1.4.2
- Tests: fix testing
parse_diff#1131 - CI: various fixes after migration to libgit2 v1.4
- Upgrade to libgit2 v1.4
- Documentation, new recipes for committing and cloning #1125
- Rename
RemoteCallbacks.progress(...)callback to.sideband_progress(...)#1120 - New
Repository.merge_base_many(...)andRepository.merge_base_octopus(...)#1112 - New
Repository.listall_stashes()#1117 - Code cleanup #1118
Backward incompatible changes:
- The
RemoteCallbacks.progress(...)callback has been renamed toRemoteCallbacks.sideband_progress(...). This matches the documentation, but may break existing code that still uses the old name.
- Universal wheels for macOS #1109
- New
Repository.amend_commit(...)#1098 - New
Commit.message_trailers#1101 - Windows wheels for Python 3.10 #1103
- Changed: now
DiffDelta.is_binaryreturnsNoneif the file data has not yet been loaded, cf. #962 - Document
Repository.get_attr(...)and update theme #1017 #1105
- Upgrade to libgit2 1.3.0 #1089
- Linux wheels now bundled with libssh2 1.10.0 (instead of 1.9.0)
- macOS wheels now include libssh2
- Add support for Python 3.10 #1092 #1093
- Drop support for Python 3.6
- New [pygit2.GIT_CHECKOUT_SKIP_LOCKED_DIRECTORIES]{.title-ref} #1087
- New optional argument
locationinRepository.applies(..)andRepository.apply(..)#1091 - Fix: Now the [flags]{.title-ref} argument in [Repository.blame()]{.title-ref} is passed through #1083
- CI: Stop using Travis, move to GitHub actions
Caveats:
- Windows wheels for Python 3.10 not yet available.
- Fix a number of reference leaks
- Review custom object backends
Breaking changes:
- In custom backends the callbacks have been renamed from
readtoread_cb,writetowrite_cb, and so on.
- New optional
proxyargument inRemotemethods #642 #1063 #1069 - New GIT_MERGE_PREFERENCE constants #1071
- Don't require cached-property with Python 3.8 or later #1066
- Add wheels for aarch64 #1077 #1078
- Documentation fixes #1068 #1072
- Refactored build and CI, new
build.shscript
Breaking changes:
- Remove deprecated
GIT_CREDTYPE_XXXconstants, useGIT_CREDENTIAL_XXXinstead. - Remove deprecated
Patch.patchgetter, usePatch.textinstead.
- New
PackBuilderclass andRepository.pack(...)#1048 - New
Config.delete_multivar(...)#1056 - New
Repository.is_shallow#1058 - New optional
messageargument inRepository.create_reference(...)#1061 #1062 - Fix truncated diff when there are nulls #1047 #1043
- Unit tests & Continuous integration #1039 #1052
Breaking changes:
- Fix
Index.add(...)raiseTypeErrorinstead ofAttributeErrorwhen arguments are of unexpected type
- Upgrade to libgit2 1.1, new
GIT_BLAME_IGNORE_WHITESPACEconstant #1040 - Add wheels for Python 3.9 #1038
- Drop support for PyPy3 7.2
- New optional
flagsargument inRepository.__init__(...), newGIT_REPOSITORY_OPEN_*constants #1044 - Documentation #509 #752 #1037 #1045
- New
Repository.add_submodule(...)#1011 - New
Repository.applies(...)#1019 - New
Repository.revparse(...)andRepository.revparse_ext(...)#1022 - New optional
flagsandfile_flagsarguments inRepository.merge_commitsandRepository.merge_trees#1008 - New
Reference.raw_target,Repository.raw_listall_branches(...)andRepository.raw_listall_references(); allow bytes inRepository.lookup_branch(...)andRepository.diff(...)#1029 - New
GIT_BLAME_FIRST_PARENTandGIT_BLAME_USE_MAILMAPconstants #1031 - New
IndexEntrysupportsrepr(),str(),==and!=#1009 - New
Objectsupportsrepr()#1022 - New accept tuples of strings (not only lists) in a number of places #1025
- Fix compatibility with old macOS 10.9 #1026 #1027
- Fix check argument type in
Repository.apply(...)#1033 - Fix raise exception if error in
Repository.listall_submodules()commit 32133974 - Fix a couple of refcount errors in
OdbBackend.refresh()andWorktree_is_prunablecommit fed0c19c - Unit tests #800 #1015
- Documentation #705
- Fix segfault in
Object.raw_namewhen not reached through a tree #1002 - Internal: Use @ffi.def_extern instead of @ffi.callback #899
- Internal: callbacks code refactored
- Test suite completely switched to pytest #824
- New unit tests #538 #996
- Documentation changes #999
Deprecations:
- Deprecate
Repository.create_remote(...), use insteadRepository.remotes.create(...) - Deprecate
GIT_CREDTYPE_XXXconstants, useGIT_CREDENTIAL_XXXinstead.
- Drop support for Python 3.5 #991
- Upgrade to libgit2 1.0 #982
- New support for custom reference database backends #982
- New support for path objects #990 #955
- New
indexoptional parameter inRepository.checkout_index#987 - New MacOS wheels #988
- Fix re-raise exception from credentials callback in clone_repository #996
- Fix warning with
pip install pygit2#986 - Tests: disable global Git config #989
- Fix crash in tree iteration #984 #980
- Do not include the docs in dist files, so they're much smaller now
- Upgrade to libgit2 0.99 #959
- Continued work on custom odb backends #948
- New
Diff.patchidgetter #960 #877 - New
settings.disable_pack_keep_file_checks(...)#908 - New
GIT_DIFF_andGIT_DELTA_constants #738 - Fix crash in iteration of config entries #970
- Travis: fix printing features when building Linux wheels #977
- Move
_pygit2topygit2._pygit2#978
Requirements changes:
- Now libgit2 0.99 is required
- New requirement: cached-property
Breaking changes:
-
In the rare case you're directly importing the low level
_pygit2, the import has changed:# Before import _pygit2 # Now from pygit2 import _pygit2
- Fix memory leak in DiffFile #943
- Fix enumerating tree entries with submodules #967
- Fix build in Mac OS #963
- Drop Python 2.7 and 3.4 support, six no longer required #941
- Add Python 3.8 support #918
- New support for
/operator to traverse trees #903 #924 - New
Branch.raw_branch_name#954 - New
Index.remove_all()#920 - New
Remote.ls_remotes(..)#935 #936 - New
Repository.lookup_reference_dwim(..)andRepository.resolve_refish(..)#922 #923 - New
Repository.odbreturns newOdbtype instance. And newOdbBackendtype. #940 #942 - New
Repository.references.compress()#961 - Optimization: Load notes lazily #958
- Fix spurious exception in config #916 #917
- Minor documentation and cosmetic changes #919 #921 #946 #950
Breaking changes:
-
Now the Repository has a new attribute
odbfor object database:# Before repository.read(...) repository.write(...) # Now repository.odb.read(...) repository.odb.write(...) -
Now
Tree[x]returns aObjectinstance instead of aTreeEntry;Object.typereturns an integer whileTreeEntry.typereturned a string:# Before if tree[x].type == 'tree': # Now if tree[x].type == GIT_OBJ_TREE: if tree[x].type_str == 'tree': -
Renamed
TreeEntry._nametoObject.raw_name:# Before tree[x]._name # Now tree[x].raw_name -
Object comparison is done by id. In the rare case you need to do tree-entry comparison or sorting:
# Before tree[x] < tree[y] sorted(list(tree)) # Now pygit2.tree_entry_cmp(x, y) < 0 sorted(list(tree), key=pygit2.tree_entry_key)
- Fix crash in reflog iteration #901
- Support symbolic references in
branches.with_commit(..)#910 - Documentation updates #909
- Test updates #911
- Now works with pycparser 2.18 and above #846
- Now
Repository.write_archive(..)keeps the file mode #616 #898 - New
Patch.datareturns the raw contents of the patch as a byte string #790 #893 - New
Patch.textreturns the contents of the patch as a text string, deprecates [Patch.patch]{.title-ref} #790 #893
Deprecations:
Patch.patchis deprecated, usePatch.textinstead
- Upgrade to libgit2 0.28 #878
- Add binary wheels for Linux #793 #869 #874 #875 #883
- New
pygit2.Mailmap, see documentation #804 - New
Repository.apply(...)wrapsgit_apply(..)#841 #843 - Now
Repository.merge_analysis(...)accepts an optional reference parameter #888 #891 - Now
Repository.add_worktree(...)accepts an optional reference parameter #814 #889 - Now it's possible to set SSL certificate locations #876 #879 #884 #886
- Test and documentation improvements #873 #887
Breaking changes:
- Now
worktree.pathreturns the path to the worktree directory, not to the [.git]{.title-ref} file within #803 - Remove undocumented
worktree.git_path#803
- New
pygit2.LIBGIT2_VERtuple #845 #848 - New objects now support (in)equality comparison and hash #852 #853
- New references now support (in)equality comparison #860 #862
- New
pathsoptional argument inRepository.checkout()#858 #859 - Fix speed and windows package regression #849 #857 #851
- Fix deprecation warning #850
- Documentation fixes #855
- Add Python classifiers to setup.py #861
- Speeding up tests in Travis #854
Breaking changes:
- Remove deprecated [Reference.get_object()]{.title-ref}, use [Reference.peel()]{.title-ref} instead
- Move to pytest, drop support for Python 3.3 and cffi 0.x #824 #826 #833 #834
- New support comparing signatures for (in)equality
- New
Submodule.head_id#817 - New
Remote.prune(...)#825 - New
pygit2.reference_is_valid_name(...)#827 - New
AlreadyExistsErrorandInvalidSpecError#828 #829 - New
Reference.raw_name,Reference.raw_shorthand,Tag.raw_name,Tag.raw_messageandDiffFile.raw_path#840 - Fix decode error in commit messages and signatures #839
- Fix, raise error in
Repository.descendant_of(...)if commit doesn't exist #822 #842 - Documentation fixes #821
Breaking changes:
- Remove undocumented
Tag._message, replaced byTag.raw_message
- Add support for Python 3.7 #809
- New
Object.short_id#799 #806 #807 - New
Repository.descendant_ofandRepository.branches.with_commit#815 #816 - Fix repository initialization in
clone_repository(...)#818 - Fix several warnings and errors, commits cd896ddc and dfa536a3
- Documentation fixes and improvements #805 #808
Breaking changes:
- Now
discover_repositoryreturnsNoneif repository not found, instead of raisingKeyError#531
Other changes:
- New
DiffLine.raw_content#610 - Fix tests failing in some cases #795
- Automate wheels upload to pypi #563
Backward incompatible changes:
-
Now iterating over a configuration returns
ConfigEntryobjects #778# Before for name in config: value = config[name] # Now for entry in config: name = entry.name value = entry.value
Other changes:
- Added support for worktrees #779
- New
Commit.gpg_signature#766 - New static
Diff.parse_diff(...)#774 - New optional argument
callbacksinRepository.update_submodules(...)#763 - New
KeypairFromMemorycredentials #771 - Add missing status constants #781
- Fix segfault #775
- Fix some unicode decode errors with Python 2 #767 #768
- Documentation improvements #721 #769 #770
- New
Diff.deltas#736 - Improvements to
Patch.create_from#753 #756 #759 - Fix build and tests in Windows, broken in the previous release #749 #751
- Review
Patch.patch#757 - Workaround bug #4442 in libgit2, and improve unit tests #748 #754 #758 #761
- New property
Patch.patch#739 #741 - New static method
Patch.create_from#742 #744 - New parameter
pruneinRemote.fetch#743 - Tests: skip tests that require network when there is not #737
- Tests: other improvements #740
- Documentation improvements
- New
Repository.free()#730 - Improve credentials handling for ssh cloning #718
- Documentation improvements #714 #715 #728 #733 #734 #735
- Update to libgit2 v0.26 #713
- Drop support for Python 3.2, add support for cffi 1.10 #706 #694
- New
Repository.revert_commit(...)#711 #710 - New
Branch.is_checked_out()#696 - Various fixes #706 #707 #708
- Add support for Python 3.6
- New support for stash: repository methods
stash,stash_apply,stash_dropandstash_pop#695 - Improved support for submodules: new repository methods
init_submodulesandupdate_submodules#692 - New friendlier API for branches & references:
Repository.branchesandRepository.references#700 #701 - New support for custom backends #690
- Fix
init_repositorycrash on None input #688 #697 - Fix checkout with an orphan master branch #669 #685
- Better error messages for opening repositories #645 #698
- Upgrade to libgit2 0.25 #670
- Now Commit.tree raises an error if tree is not found #682
- New settings.mwindow_mapped_limit, cached_memory, enable_caching, cache_max_size and cache_object_limit #677
- Unit tests pass on Windows, integration with AppVeyor #641 #655 #657 #659 #660 #661 #667
- Fix when libgit2 error messages have non-ascii chars #651
- Documentation improvements #643 #653 #663
- New
Repository.listall_reference_objects()#634 - Fix
Repository.write_archive(...)#619 #621 - Reproducible builds #636
- Documentation fixes #606 #607 #609 #623
- Test updates #629
- Update to libgit2 v0.24 #594
- Support Python 3.5
- New dependency, six
- New
Repository.path_is_ignored(path)#589 - Fix error in
Repository(path)when path is a bytes string #588 #593 - Fix memory issue in
Repository.describe(...)#592 #597 #599 - Allow testing with tox #600
- New
Repository.create_blob_fromiobase(...)#490 #577 - New
Repository.describe(...)#585 - Fix
Signaturedefault encoding, UTF-8 now #581 - Fixing
pip install pygit2, should install cffi first - Unit tests, fix binary diff test #586
- Document that
Diff.patchcan beNone#587
- Unify callbacks system for remotes and clone #568
- New
TreeEntry._name#570 - Fix segfault in
Tag._message#572 - Documentation improvements #569 #574
API changes to clone:
# Before
clone_repository(..., credentials, certificate)
# Now
callbacks = RemoteCallbacks(credentials, certificate)
clone_repository(..., callbacks)
API changes to remote:
# Before
def transfer_progress(stats):
...
remote.credentials = credentials
remote.transfer_progress = transfer_progress
remote.fetch()
remote.push(specs)
# Now
class MyCallbacks(RemoteCallbacks):
def transfer_progress(self, stats):
...
callbacks = MyCallbacks(credentials)
remote.fetch(callbacks=callbacks)
remote.push(specs, callbacks=callbacks)
- Improve support for cffi 1.0+ #529 #561
- Fix
Remote.push#557 - New
TreeEntry.type#560 - New
pygit2.GIT_DIFF_SHOW_BINARY#566
- Update to libgit2 v0.23 #540
- Now
Repository.merge_base(...)returnsNoneif no merge base is found #550 - Documentation updates #547
API changes:
-
How to set identity (aka signature) in a reflog has changed:
# Before signature = Signature('foo', 'bar') ... reference.set_target(target, signature=signature, message=message) repo.set_head(target, signature=signature) remote.fetch(signature=signature) remote.push(signature=signature) # Now repo.set_ident('foo', 'bar') ... reference.set_target(target, message=message) repo.set_head(target) remote.push() # The current identity can be get with repo.ident -
Some remote setters have been replaced by methods:
# Before # Now Remote.url = url Repository.remotes.set_url(name, url) Remote.push_url = url Repository.remotes.set_push_url(name, url) Remote.add_fetch(refspec) Repository.remotes.add_fetch(name, refspec) Remote.add_push(refspec) Repository.remotes.add_push(name, refspec) Remote.fetch_refspecs = [...] removed, use the config API instead Remote.push_refspecs = [...] removed, use the config API instead
Diff interface refactoring #346 (in progress):
-
New
iter(pygit2.Blame) -
New
pygit2.DiffDelta,pygit2.DiffFileandpygit.DiffLine -
API changes, translation table:
Hunk => DiffHunk Patch.old_file_path => Patch.delta.old_file.path Patch.new_file_path => Patch.delta.new_file.path Patch.old_id => Patch.delta.old_file.id Patch.new_id => Patch.delta.new_file.id Patch.status => Patch.delta.status Patch.similarity => Patch.delta.similarity Patch.is_binary => Patch.delta.is_binary Patch.additions => Patch.line_stats[1] Patch.deletions => Patch.line_stats[2] -
DiffHunk.linesis now a list ofDiffLineobjects, not tuples
New features:
- New
Repository.expand_id(...)andRepository.ahead_behind(...)#448 - New
prefixparameter inRepository.write_archive#481 - New
Repository.merge_trees(...)#489 - New
Repository.cherrypick(...)#436 #492 - New support for submodules #499 #514
- New
Repository.merge_file_from_index(...)#503 - Now
Repository.diffsupports diffing two blobs #508 - New optional
fetchparameter inRemote.create#526 - New
pygit2.DiffStats#406 #525 - New
Repository.get_attr(...)#528 - New
leveloptional parameter inIndex.remove#533 - New
repr(TreeEntry)#543
Build and install improvements:
Bugs fixed:
- Fix memory issues #477 #487 #520
- Fix TreeEntry equality testing #458 #488
Repository.write_archivefix handling of symlinks #480- Fix type check in
Diff[...]#495 - Fix error when merging files with unicode content #505
Other:
- Documentation improvements and fixes #448 #491 #497 #507 #517 #518 #519 #521 #523 #527 #536
- Expose the
pygit2.GIT_REPOSITORY_INIT_*constants #483
New:
- Update to libgit2 v0.22 #459
- Add support for libgit2 feature detection (new
pygit2.featuresandpygit2.GIT_FEATURE_*) #475 - New
Repository.remotes(RemoteCollection) #447
API Changes:
- Prototype of
clone_repositorychanged, check documentation - Removed
clone_into, useclone_repositorywith callbacks instead - Use
Repository.remotes.rename(name, new_name)instead ofRemote.rename(new_name) - Use
Repository.remotes.delete(name)instead ofRemote.delete() - Now
Remote.push(...)takes a list of refspecs instead of just one - Change
Patch.old_id,Patch.new_id,Note.annotated_id,RefLogEntry.oid_oldandRefLogEntry.oid_newto beOidobjects instead of strings #449
Other:
- Fix
init_repositorywhen passing optional parametersworkdir_path,description,template_path,initial_headororigin_url#466 #471 - Fix use-after-free when patch outlives diff #457 #461 #474
- Documentation improvements #456 #462 #465 #472 #473
- Make the GPL exception explicit in setup.py #450
- Fix credentials callback not set when pushing #431 #435 #437 #438
- Fix
Repository.diff(...)when treeish is "empty" #432 - New
Reference.peel(...)rendersReference.get_object()obsolete #434 - New, authenticate using ssh agent #424
- New
Repository.merge_commits(...)#445 - Make it easier to run when libgit2 not in a standard location #441
- Documentation: review install chapter
- Documentation: many corrections #427 #429 #439 #440 #442 #443 #444
Breaking changes:
- Now
Repository.blame(...)returnsOidinstead of string #413 - New
Reference.set_target(...)replaces theReference.targetsetter andReference.log_append(...)#414 - New
Repository.set_head(...)replaces theRepository.headsetter #414 Repository.merge(...)now uses theSAFE_CREATEstrategy by default #417
Other changes:
- New
Remote.delete()#418 #420 - New
Repository.write_archive(...)#421 - Now
Repository.checkout(...)accepts branch objects #408 - Fix refcount leak in remotes #403 #404 #419
- Various fixes to
clone_repository(...)#399 #411 #425 #426 - Fix build error in Python 3 #401
- Now
pip install pygit2installs cffi first #380 #407 - Add support for PyPy3 #422
- Documentation improvements #398 #409
- Fix regression with Python 2,
IndexEntry.pathreturns str (bytes in Python 2 and unicode in Python 3) - Get back
IndexEntry.oidfor backwards compatibility - Config, iterate over the keys (instead of the key/value pairs) #395
Diff.find_similarsupports new threshold arguments #396- Optimization, do not load the object when expanding an oid prefix #397
- Install fix #382
- Documentation improved, including #383 #385 #388
- Documentation, use the read-the-docs theme #387
- Coding style improvements #392
- New
Repository.state_cleanup()#386 - New
Index.conflicts#345 #389 - New checkout option to define the target directory #390
Backward incompatible changes:
-
Now the checkout strategy must be a keyword argument.
Change
Repository.checkout(refname, strategy)toRepository.checkout(refname, strategy=strategy)Idem for
checkout_head,checkout_indexandcheckout_tree
Highlights:
- Drop official support for Python 2.6, and add support for Python 3.4 #376
- Upgrade to libgit2 v0.21.0 #374
- Start using cffi #360 #361
Backward incompatible changes:
- Replace
oidbyidthrough the API to follow libgit2 conventions. - Merge API overhaul following changes in libgit2.
- New
Remote.rename(...)replacesRemote.name = ... - Now
Remote.fetch()returns aTransferProgressobject. - Now
Config.get_multivar(...)returns an iterator instead of a list.
New features:
- New
Config.snapshot()andRepository.config_snapshot() - New
Configmethods:get_bool(...),get_int(...),parse_bool(...)andparse_int(...)#357 - Blob: implement the memory buffer interface #362
- New
clone_into(...)function #368 - Now
Indexcan be used alone, without a repository #372 - Add more options to
init_repository#347 - Support
Repository.workdir = ...and support setting detached headsRepository.head = <Oid>#377
Other:
- Fix again build with VS2008 #364
- Fix
Blob.diff(...)andBlob.diff_to_buffer(...)arguments passing #366 - Fail gracefully when compiling against the wrong version of libgit2 #365
- Several documentation improvements and updates #359 #375 #378
- A number of memory issues fixed #328 #348 #353 #355 #356
- Compatibility fixes for PyPy (#338), Visual Studio 2008 (#343) and Python 3.3 (#351)
- Make the sort mode parameter in
Repository.walk(...)optional #337 - New
Object.peel(...)#342 - New
Index.add_all(...)#344 - Introduce support for libgit2 options #350
- More informative repr for
Repositoryobjects #352 - Introduce support for credentials #354
- Several documentation fixes #302 #336
- Tests, remove temporary files #341
Repository:
- New
Repository.default_signature#310
Oid:
- New
str(Oid)deprecatesOid.hex#322
Object:
- New
Object.iddeprecatesObject.oid#322 - New
TreeEntry.iddeprecatesTreeEntry.oid#322 - New
Blob.diff(...)andBlob.diff_to_buffer(...)#307 - New
Commit.tree_idandCommit.parent_ids#73 #311 - New rich comparison between tree entries #305 #313
- Now
Tree.__contains__(key)supports paths #306 #316
Index:
- Now possible to create
IndexEntry(...)#325 - Now
IndexEntry.path,IndexEntry.oidandIndexEntry.modeare writable #325 - Now
Index.add(...)accepts anIndexEntrytoo #325 - Now
Index.write_tree(...)is able to write to a different repository #325 - Fix memory leak in
IndexEntry.pathsetter #335
Config:
Remote:
- New type
Refspec#314 - New
Remote.push_url#315 - New
Remote.add_pushandRemote.add_fetch#255 #318 - New
Remote.fetch_refspecsreplacesRemote.get_fetch_refspecs()andRemote.set_fetch_refspecs(...)#319 - New
Remote.push_refspecsreplacesRemote.get_push_refspecs()andRemote.set_push_refspecs(...)#319 - New
Remote.progress,Remote.transfer_progressandRemote.update_tips#274 #324 - New type
TransferProgress#274 #324 - Fix refcount leak in
Repository.remotes#321 #332
Other: #331
- New remote ref-specs API: #290
- New
Repository.reset(...): #292, #294 - Export
GIT_DIFF_MINIMAL: #293 - New
Repository.merge(...): #295 - Fix
Repository.blameargument handling: #297 - Fix build error on Windows: #298
- Fix typo in the README file, Blog → Blob: #301
- Now
Diff.patchreturnsNoneif no patch: #232, #303 - New
Walker.simplify_first_parent(): #304
- Upgrade to libgit2 v0.20.0: #288
- New
Repository.head_is_unbornreplacesRepository.head_is_orphaned - Changed
pygit2.clone_repository(...). Droppush_url,fetch_specandpush_specparameters. Addignore_cert_errors. - New
Patch.additionsandPatch.deletions: #275 - New
Patch.is_binary: #276 - New
Reference.log_append(...): #277 - New
Blob.is_binary: #278 - New
len(Diff)shows the number of patches: #281 - Rewrite
Repository.status(): #283 - New
Reference.shorthand: #284 - New
Repository.blame(...): #285 - Now
Repository.listall_references()andRepository.listall_branches()return a list, not a tuple: #289