Skip to content

Latest commit

 

History

History
1291 lines (893 loc) · 40.5 KB

CHANGELOG.rst

File metadata and controls

1291 lines (893 loc) · 40.5 KB

1.0.0 (UNRELEASED)

  • Drop Python 2.7 and 3.4 support, six no longer required #941
  • Add Python 3.8 support #918
  • New Repository.odb returns new Odb type instance. And new OdbBackend type. #940 #942
  • New support for / operator to traverse trees #903 #924
  • New Index.remove_all() #920
  • New Repository.lookup_reference_dwim(..) and Repository.resolve_refish(..) #922 #923
  • New Remote.ls_remotes(..) #935 #936
  • 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 #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 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(), use Reference.peel() 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 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)

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