Skip to content

Latest commit

 

History

History
1559 lines (1291 loc) · 61 KB

CHANGELOG.md

File metadata and controls

1559 lines (1291 loc) · 61 KB

1.15.0 (UNRELEASED)

  • Many deprecated features have been removed, see below

  • Upgrade to libgit2 v1.8.0

  • New push_options optional argument in Repository.push(...) #1282

  • New support comparison of Oid with text string

  • 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, use str(IndexEntry.id)

Breaking changes:

  • Remove deprecated oid.hex, use str(oid)

  • Remove deprecated object.hex, use str(object.id)

  • Remove deprecated object.oid, use object.id

  • Remove deprecated Repository.add_submodule(...), use Repository.submodules.add(...)

  • Remove deprecated Repository.lookup_submodule(...), use Repository.submodules[...]

  • Remove deprecated Repository.init_submodules(...), use Repository.submodules.init(...)

  • Remove deprecated Repository.update_submodule(...), use Repository.submodules.update(...)

  • Remove deprecated constants GIT_OBJ_XXX, use ObjectType

  • Remove deprecated constants GIT_REVPARSE_XXX, use RevSpecFlag

  • Remove deprecated constants GIT_REF_XXX, use ReferenceType

  • Remove deprecated ReferenceType.OID, use instead ReferenceType.DIRECT

  • Remove deprecated ReferenceType.LISTALL, use instead ReferenceType.ALL

  • Remove deprecated support for passing dicts to repository's merge(...), merge_commits(...) and merge_trees(...). Instead pass MergeFlag for flags, and MergeFileFlag for file_flags.

  • Remove deprecated support for passing a string for the favor argument to repository's merge(...), merge_commits(...) and merge_trees(...). Instead pass MergeFavor.

1.14.1 (2024-02-10)

  • Update wheels to libgit2 v1.7.2

  • Now Object.filemode returns enums.FileMode and Reference.type returns enums.ReferenceType #1273

  • Fix tests on Fedora 40 #1275

Deprecations:

  • Deprecate ReferenceType.OID, use ReferenceType.DIRECT
  • Deprecate ReferenceType.LISTALL, use ReferenceType.ALL

1.14.0 (2024-01-26)

  • Drop support for Python 3.8
  • Add Linux wheels for musl on x86_64 #1266
  • New Repository.submodules namespace #1250
  • New Repository.listall_mergeheads(), Repository.message, Repository.raw_message and Repository.remove_message() #1261
  • New pygit2.enums supersedes the GIT_ constants #1251
  • Now Repository.status(), Repository.status_file(), Repository.merge_analysis(), DiffFile.flags, DiffFile.mode, DiffDelta.flags and DiffDelta.status return enums #1263
  • Now repository's merge(), merge_commits() and merge_trees() take enums/flags for their favor, flags and file_flags arguments. #1271 #1272
  • Fix crash in filter cleanup #1259
  • Documentation fixes #1255 #1258 #1268 #1270

Breaking changes:

  • Remove deprecated Repository.create_remote(...) function, use instead Repository.remotes.create(...)

Deprecations:

  • Deprecate Repository.add_submodule(...), use Repository.submodules.add(...)

  • Deprecate Repository.lookup_submodule(...), use Repository.submodules[...]

  • Deprecate Repository.init_submodules(...), use Repository.submodules.init(...)

  • Deprecate Repository.update_submodule(...), use Repository.submodules.update(...)

  • Deprecate GIT_* constants, use pygit2.enums

  • Passing dicts to repository's merge(...), merge_commits(...) and merge_trees(...) is deprecated. Instead pass MergeFlag for the flags argument, and MergeFileFlag for file_flags.

  • Passing a string for the favor argument to repository's merge(...), merge_commits(...) and merge_trees(...) is deprecated. Instead pass MergeFavor.

1.13.3 (2023-11-21)

  • New API for filters in Python #1237 #1244
  • Shallow repositories: New depth optional argument for clone_repository(...) and Remote.fetch(...) #1245 #1246
  • New submodule init(...), update(...) and reload(...) functions #1248
  • Release GIL in Walker.__next__ #1249
  • Type hints for submodule functions in Repository #1247

1.13.2 (2023-10-30)

  • Support Python 3.12
  • Documentation updates #1242

1.13.1 (2023-09-24)

  • Fix crash in reference rename #1233

1.13.0 (2023-09-07)

  • 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

1.12.2 (2023-06-25)

  • Update wheels to bundle libssh2 1.11.0 and OpenSSL 3.0.9
  • Remove obsolete Remote.save() #1219

1.12.1 (2023-05-07)

  • Fix segfault in signature when encoding is incorrect #1210
  • Typing improvements #1212 #1214
  • Update wheels to libgit2 v1.6.4

1.12.0 (2023-04-01)

  • 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, flags and file_flags optional arguments for Repository.merge(...) #1192
  • New keep_all and paths optional arguments for Repository.stash(...) #1202
  • New Respository.state() #1204
  • Improve Repository.write_archive(...) performance #1183
  • Sync type annotations #1203

1.11.1 (2022-11-09)

  • 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

1.11.0 (2022-11-06)

  • 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_error in Repository.applies(...) #1166
  • New notify/progress callbacks for checkout and stash #1167 #1169
  • New Repository.remotes.names() #1159
  • Now refname argument in RemoteCallbacks.push_update_reference(...) is a string, not bytes #1168
  • Add missing newline at end of pygit2/decl/pack.h #1163

1.10.1 (2022-08-28)

  • Fix segfault in Signature repr #1155
  • Linux and macOS wheels for Python 3.11 #1154

1.10.0 (2022-07-24)

  • Upgrade to libgit2 1.5
  • Add support for GIT_OPT_GET_OWNER_VALIDATION and GIT_OPT_SET_OWNER_VALIDATION #1150
  • New untracked_files and ignored optional arguments for Repository.status(...) #1151

1.9.2 (2022-05-24)

  • New Repository.create_commit_string(...) and Repository.create_commit_with_signature(...) #1142
  • Linux and macOS wheels updated to libgit2 v1.4.3
  • Remove redundant line #1139

1.9.1 (2022-03-22)

  • Type hints: added to C code and Branches/References #1121 #1132
  • New Signature supports str() and repr() #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

1.9.0 (2022-02-22)

  • Upgrade to libgit2 v1.4
  • Documentation, new recipes for committing and cloning #1125

1.8.0 (2022-02-04)

  • Rename RemoteCallbacks.progress(...) callback to .sideband_progress(...) #1120
  • New Repository.merge_base_many(...) and Repository.merge_base_octopus(...) #1112
  • New Repository.listall_stashes() #1117
  • Code cleanup #1118

Backward incompatible changes:

  • The RemoteCallbacks.progress(...) callback has been renamed to RemoteCallbacks.sideband_progress(...). This matches the documentation, but may break existing code that still uses the old name.

1.7.2 (2021-12-06)

  • Universal wheels for macOS #1109

1.7.1 (2021-11-19)

  • New Repository.amend_commit(...) #1098
  • New Commit.message_trailers #1101
  • Windows wheels for Python 3.10 #1103
  • Changed: now DiffDelta.is_binary returns None if the file data has not yet been loaded, cf. #962
  • Document Repository.get_attr(...) and update theme #1017 #1105

1.7.0 (2021-10-08)

  • 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 location in Repository.applies(..) and Repository.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.

1.6.1 (2021-06-19)

  • Fix a number of reference leaks
  • Review custom object backends

Breaking changes:

  • In custom backends the callbacks have been renamed from read to read_cb, write to write_cb, and so on.

1.6.0 (2021-06-01)

  • New optional proxy argument in Remote methods #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.sh script

Breaking changes:

  • Remove deprecated GIT_CREDTYPE_XXX contants, use GIT_CREDENTIAL_XXX instead.
  • Remove deprecated Patch.patch getter, use Patch.text instead.

1.5.0 (2021-01-23)

  • New PackBuilder class and Repository.pack(...) #1048
  • New Config.delete_multivar(...) #1056
  • New Repository.is_shallow #1058
  • New optional message argument in Repository.create_reference(...) #1061 #1062
  • Fix truncated diff when there are nulls #1047 #1043
  • Unit tests & Continuous integration #1039 #1052

Breaking changes:

  • Fix Index.add(...) raise TypeError instead of AttributeError when arguments are of unexpected type

1.4.0 (2020-11-06)

  • Upgrade to libgit2 1.1, new GIT_BLAME_IGNORE_WHITESPACE constant #1040
  • Add wheels for Python 3.9 #1038
  • Drop support for PyPy3 7.2
  • New optional flags argument in Repository.__init__(...), new GIT_REPOSITORY_OPEN_* constants #1044
  • Documentation #509 #752 #1037 #1045

1.3.0 (2020-09-18)

  • New Repository.add_submodule(...) #1011
  • New Repository.applies(...) #1019
  • New Repository.revparse(...) and Repository.revparse_ext(...) #1022
  • New optional flags and file_flags arguments in Repository.merge_commits and Repository.merge_trees #1008
  • New Reference.raw_target, Repository.raw_listall_branches(...) and Repository.raw_listall_references(); allow bytes in Repository.lookup_branch(...) and Repository.diff(...) #1029
  • New GIT_BLAME_FIRST_PARENT and GIT_BLAME_USE_MAILMAP constants #1031
  • New IndexEntry supports repr(), str(), == and != #1009
  • New Object supports repr() #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() and Worktree_is_prunable commit fed0c19c
  • Unit tests #800 #1015
  • Documentation #705

1.2.1 (2020-05-01)

  • Fix segfault in Object.raw_name when 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 instead Repository.remotes.create(...)
  • Deprecate GIT_CREDTYPE_XXX contants, use GIT_CREDENTIAL_XXX instead.

1.2.0 (2020-04-05)

  • 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 index optional parameter in Repository.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

1.1.1 (2020-03-06)

  • Fix crash in tree iteration #984 #980
  • Do not include the docs in dist files, so they're much smaller now

1.1.0 (2020-03-01)

  • Upgrade to libgit2 0.99 #959
  • Continued work on custom odb backends #948
  • New Diff.patchid getter #960 #877
  • New settings.disable_pack_keep_file_checks(...) #908
  • New GIT_DIFF_ and GIT_DELTA_ constants #738
  • Fix crash in iteration of config entries #970
  • Travis: fix printing features when building Linux wheels #977
  • Move _pygit2 to pygit2._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
    

1.0.3 (2020-01-31)

  • Fix memory leak in DiffFile #943

1.0.2 (2020-01-11)

  • Fix enumerating tree entries with submodules #967

1.0.1 (2019-12-21)

  • Fix build in Mac OS #963

1.0.0 (2019-12-06)

  • 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(..) and Repository.resolve_refish(..) #922 #923
  • New Repository.odb returns new Odb type instance. And new OdbBackend type. #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 attribue odb for object database:

    # Before
    repository.read(...)
    repository.write(...)
    
    # Now
    repository.odb.read(...)
    repository.odb.write(...)
    
  • Now Tree[x] returns a Object instance instead of a TreeEntry; Object.type returns an integer while TreeEntry.type returned a string:

    # Before
    if tree[x].type == 'tree':
    
    # Now
    if tree[x].type == GIT_OBJ_TREE:
    if tree[x].type_str == 'tree':
    
  • Renamed TreeEntry._name to Object.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)
    

0.28.2 (2019-05-26)

  • Fix crash in reflog iteration #901
  • Support symbolic references in branches.with_commit(..) #910
  • Documentation updates #909
  • Test updates #911

0.28.1 (2019-04-19)

  • Now works with pycparser 2.18 and above #846
  • Now Repository.write_archive(..) keeps the file mode #616 #898
  • New Patch.data returns the raw contents of the patch as a byte string #790 #893
  • New Patch.text returns the contents of the patch as a text string, deprecates [Patch.patch]{.title-ref} #790 #893

Deprecations:

  • Patch.patch is deprecated, use Patch.text instead

0.28.0 (2019-03-19)

  • 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(...) wraps git_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.path returns the path to the worktree directory, not to the [.git]{.title-ref} file within #803
  • Remove undocumented worktree.git_path #803

0.27.4 (2019-01-19)

  • New pygit2.LIBGIT2_VER tuple #845 #848
  • New objects now support (in)equality comparison and hash #852 #853
  • New references now support (in)equality comparison #860 #862
  • New paths optional argument in Repository.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

0.27.3 (2018-12-15)

  • 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 AlreadyExistsError and InvalidSpecError #828 #829
  • New Reference.raw_name, Reference.raw_shorthand, Tag.raw_name, Tag.raw_message and DiffFile.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 by Tag.raw_message

0.27.2 (2018-09-16)

  • Add support for Python 3.7 #809
  • New Object.short_id #799 #806 #807
  • New Repository.descendant_of and Repository.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

0.27.1 (2018-06-02)

Breaking changes:

  • Now discover_repository returns None if repository not found, instead of raising KeyError #531

Other changes:

  • New DiffLine.raw_content #610
  • Fix tests failing in some cases #795
  • Automatize wheels upload to pypi #563

0.27.0 (2018-03-30)

  • Update to libgit2 v0.27 #783
  • Fix for GCC 4 #786

0.26.4 (2018-03-23)

Backward incompatible changes:

  • Now iterating over a configuration returns ConfigEntry objects #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 callbacks in Repository.update_submodules(...) #763
  • New KeypairFromMemory credentials #771
  • Add missing status constants #781
  • Fix segfault #775
  • Fix some unicode decode errors with Python 2 #767 #768
  • Documentation improvements #721 #769 #770

0.26.3 (2017-12-24)

0.26.2 (2017-12-01)

  • New property Patch.patch #739 #741
  • New static method Patch.create_from #742 #744
  • New parameter prune in Remote.fetch #743
  • Tests: skip tests that require network when there is not #737
  • Tests: other improvements #740
  • Documentation improvements

0.26.1 (2017-11-19)

0.26.0 (2017-07-06)

  • 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

0.25.1 (2017-04-25)

  • Add support for Python 3.6
  • New support for stash: repository methods stash, stash_apply, stash_drop and stash_pop #695
  • Improved support for submodules: new repository methods init_submodules and update_submodules #692
  • New friendlier API for branches & references: Repository.branches and Repository.references #700 #701
  • New support for custom backends #690
  • Fix init_repository crash on None input #688 #697
  • Fix checkout with an orphan master branch #669 #685
  • Better error messages for opening repositories #645 #698

0.25.0 (2016-12-26)

  • 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

0.24.2 (2016-11-01)

0.24.1 (2016-06-21)

0.24.0 (2016-03-05)

  • 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

0.23.3 (2016-01-01)

  • New Repository.create_blob_fromiobase(...) #490 #577
  • New Repository.describe(...) #585
  • Fix Signature default encoding, UTF-8 now #581
  • Fixing pip install pygit2, should install cffi first
  • Unit tests, fix binary diff test #586
  • Document that Diff.patch can be None #587

0.23.2 (2015-10-11)

  • 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)

0.23.1 (2015-09-26)

  • Improve support for cffi 1.0+ #529 #561
  • Fix Remote.push #557
  • New TreeEntry.type #560
  • New pygit2.GIT_DIFF_SHOW_BINARY #566

0.23.0 (2015-08-14)

  • Update to libgit2 v0.23 #540
  • Now Repository.merge_base(...) returns None if 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
    

0.22.1 (2015-07-12)

Diff interface refactoring #346 (in progress):

  • New iter(pygit2.Blame)

  • New pygit2.DiffDelta, pygit2.DiffFile and pygit.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.lines is now a list of DiffLine objects, not tuples

New features:

  • New Repository.expand_id(...) and Repository.ahead_behind(...) #448
  • New prefix parameter in Repository.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.diff supports diffing two blobs #508
  • New optional fetch parameter in Remote.create #526
  • New pygit2.DiffStats #406 #525
  • New Repository.get_attr(...) #528
  • New level optional parameter in Index.remove #533
  • New repr(TreeEntry) #543

Build and install improvements:

  • Make pygit work in a frozen environment #453
  • Make pygit2 work with pyinstaller #510

Bugs fixed:

  • Fix memory issues #477 #487 #520
  • Fix TreeEntry equality testing #458 #488
  • Repository.write_archive fix handling of symlinks #480
  • Fix type check in Diff[...] #495
  • Fix error when merging files with unicode content #505

Other:

0.22.0 (2015-01-16)

New:

  • Update to libgit2 v0.22 #459
  • Add support for libgit2 feature detection (new pygit2.features and pygit2.GIT_FEATURE_*) #475
  • New Repository.remotes (RemoteCollection) #447

API Changes:

  • Prototype of clone_repository changed, check documentation
  • Removed clone_into, use clone_repository with callbacks instead
  • Use Repository.remotes.rename(name, new_name) instead of Remote.rename(new_name)
  • Use Repository.remotes.delete(name) instead of Remote.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_old and RefLogEntry.oid_new to be Oid objects instead of strings #449

Other:

  • Fix init_repository when passing optional parameters workdir_path, description, template_path, initial_head or origin_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

0.21.4 (2014-11-04)

  • Fix credentials callback not set when pushing #431 #435 #437 #438
  • Fix Repository.diff(...) when treeish is "empty" #432
  • New Reference.peel(...) renders Reference.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

0.21.3 (2014-09-15)

Breaking changes:

  • Now Repository.blame(...) returns Oid instead of string #413
  • New Reference.set_target(...) replaces the Reference.target setter and Reference.log_append(...) #414
  • New Repository.set_head(...) replaces the Repository.head setter #414
  • Repository.merge(...) now uses the SAFE_CREATE strategy 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 pygit2 installs cffi first #380 #407
  • Add support for PyPy3 #422
  • Documentation improvements #398 #409

0.21.2 (2014-08-09)

  • Fix regression with Python 2, IndexEntry.path returns str (bytes in Python 2 and unicode in Python 3)
  • Get back IndexEntry.oid for backwards compatibility
  • Config, iterate over the keys (instead of the key/value pairs) #395
  • Diff.find_similar supports new threshold arguments #396
  • Optimization, do not load the object when expanding an oid prefix #397

0.21.1 (2014-07-22)

  • 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) to Repository.checkout(refname, strategy=strategy)

    Idem for checkout_head, checkout_index and checkout_tree

0.21.0 (2014-06-27)

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 oid by id through the API to follow libgit2 conventions.
  • Merge API overhaul following changes in libgit2.
  • New Remote.rename(...) replaces Remote.name = ...
  • Now Remote.fetch() returns a TransferProgress object.
  • Now Config.get_multivar(...) returns an iterator instead of a list.

New features:

  • New Config.snapshot() and Repository.config_snapshot()
  • New Config methods: get_bool(...), get_int(...), parse_bool(...) and parse_int(...) #357
  • Blob: implement the memory buffer interface #362
  • New clone_into(...) function #368
  • Now Index can be used alone, without a repository #372
  • Add more options to init_repository #347
  • Support Repository.workdir = ... and support setting detached heads Repository.head = <Oid> #377

Other:

  • Fix again build with VS2008 #364
  • Fix Blob.diff(...) and Blob.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

0.20.3 (2014-04-02)

  • 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 Repository objects #352
  • Introduce support for credentials #354
  • Several documentation fixes #302 #336
  • Tests, remove temporary files #341

0.20.2 (2014-02-04)

Repository:

  • New Repository.default_signature #310

Oid:

  • New str(Oid) deprecates Oid.hex #322

Object:

  • New Object.id deprecates Object.oid #322
  • New TreeEntry.id deprecates TreeEntry.oid #322
  • New Blob.diff(...) and Blob.diff_to_buffer(...) #307
  • New Commit.tree_id and Commit.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.oid and IndexEntry.mode are writable #325
  • Now Index.add(...) accepts an IndexEntry too #325
  • Now Index.write_tree(...) is able to write to a different repository #325
  • Fix memory leak in IndexEntry.path setter #335

Config:

  • New Config iterator replaces Config.foreach #183 #312

Remote:

  • New type Refspec #314
  • New Remote.push_url #315
  • New Remote.add_push and Remote.add_fetch #255 #318
  • New Remote.fetch_refspecs replaces Remote.get_fetch_refspecs() and Remote.set_fetch_refspecs(...) #319
  • New Remote.push_refspecs replaces Remote.get_push_refspecs() and Remote.set_push_refspecs(...) #319
  • New Remote.progress, Remote.transfer_progress and Remote.update_tips #274 #324
  • New type TransferProgress #274 #324
  • Fix refcount leak in Repository.remotes #321 #332

Other: #331

0.20.1 (2013-12-24)

  • New remote ref-specs API: #290
  • New Repository.reset(...): #292, #294
  • Export GIT_DIFF_MINIMAL: #293
  • New Repository.merge(...): #295
  • Fix Repository.blame argument handling: #297
  • Fix build error on Windows: #298
  • Fix typo in the README file, Blog → Blob: #301
  • Now Diff.patch returns None if no patch: #232, #303
  • New Walker.simplify_first_parent(): #304

0.20.0 (2013-11-24)

  • Upgrade to libgit2 v0.20.0: #288
  • New Repository.head_is_unborn replaces Repository.head_is_orphaned
  • Changed pygit2.clone_repository(...). Drop push_url, fetch_spec and push_spec parameters. Add ignore_cert_errors.
  • New Patch.additions and Patch.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() and Repository.listall_branches() return a list, not a tuple: #289