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 suport 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) ------------------------- - 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 `_ 0.24.1 (2016-06-21) ------------------------- - New ``Repository.listall_reference_objects()`` `#634 `_ - Fix ``Repository.write_archive(...)`` `#619 `_ `#621 `_ - Reproducible builds `#636 `_ - Documentation fixes `#606 `_ `#607 `_ `#609 `_ `#623 `_ - Test updates `#629 `_ 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: - Documentation improvements and fixes `#448 `_ `#491 `_ `#497 `_ `#507 `_ `#517 `_ `#518 `_ `#519 `_ `#521 `_ `#523 `_ `#527 `_ `#536 `_ - Expose the ``pygit2.GIT_REPOSITORY_INIT_*`` constants `#483 `_ 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 = `` `#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) ------------------- - Support PyPy `#209 `_ `#327 `_ `#333 `_ 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 `_