-
-
Notifications
You must be signed in to change notification settings - Fork 387
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Stop using the internal git_worktree struct #803
Comments
Thanks @mystor, you're right. @rmedaer @nhynes @terminalmage |
👍 agreed. A stable and maintainable API is worth the breaking changes. Since |
Makes sense, relying on non-public attributes is a recipe for disaster. As long as this is in the release notes, it should be fine. |
Agreed too ! No problem with breaking changes but as @jdavid said: we still have to support the feature. |
Instead of path to .git file within the worktree directory. This is a breaking change. And start changelog for the upcoming release. Issue #803
Done. If this change bothers you, in particular the removal of |
Add test target. 0.28.0 (2019-03-19) ------------------------- - Upgrade to libgit2 0.28 `#878 <https://github.com/libgit2/pygit2/issues/878>`_ - Add binary wheels for Linux `#793 <https://github.com/libgit2/pygit2/issues/793>`_ `#869 <https://github.com/libgit2/pygit2/pull/869>`_ `#874 <https://github.com/libgit2/pygit2/pull/874>`_ `#875 <https://github.com/libgit2/pygit2/pull/875>`_ `#883 <https://github.com/libgit2/pygit2/pull/883>`_ - New ``pygit2.Mailmap``, see documentation `#804 <https://github.com/libgit2/pygit2/pull/804>`_ - New ``Repository.apply(...)`` wraps ``git_apply(..)`` `#841 <https://github.com/libgit2/pygit2/issues/841>`_ `#843 <https://github.com/libgit2/pygit2/pull/843>`_ - Now ``Repository.merge_analysis(...)`` accepts an optional reference parameter `#888 <https://github.com/libgit2/pygit2/pull/888>`_ `#891 <https://github.com/libgit2/pygit2/pull/891>`_ - Now ``Repository.add_worktree(...)`` accepts an optional reference parameter `#814 <https://github.com/libgit2/pygit2/issues/814>`_ `#889 <https://github.com/libgit2/pygit2/pull/889>`_ - Now it's possible to set SSL certificate locations `#876 <https://github.com/libgit2/pygit2/issues/876>`_ `#879 <https://github.com/libgit2/pygit2/pull/879>`_ `#884 <https://github.com/libgit2/pygit2/pull/884>`_ `#886 <https://github.com/libgit2/pygit2/pull/886>`_ - Test and documentation improvements `#873 <https://github.com/libgit2/pygit2/pull/873>`_ `#887 <https://github.com/libgit2/pygit2/pull/887>`_ Breaking changes: - Now ``worktree.path`` returns the path to the worktree directory, not to the `.git` file within `#803 <https://github.com/libgit2/pygit2/issues/803>`_ - Remove undocumented ``worktree.git_path`` `#803 <https://github.com/libgit2/pygit2/issues/803>`_ 0.27.4 (2019-01-19) ------------------------- - New ``pygit2.LIBGIT2_VER`` tuple `#845 <https://github.com/libgit2/pygit2/issues/845>`_ `#848 <https://github.com/libgit2/pygit2/pull/848>`_ - New objects now support (in)equality comparison and hash `#852 <https://github.com/libgit2/pygit2/issues/852>`_ `#853 <https://github.com/libgit2/pygit2/pull/853>`_ - New references now support (in)equality comparison `#860 <https://github.com/libgit2/pygit2/issues/860>`_ `#862 <https://github.com/libgit2/pygit2/pull/862>`_ - New ``paths`` optional argument in ``Repository.checkout()`` `#858 <https://github.com/libgit2/pygit2/issues/858>`_ `#859 <https://github.com/libgit2/pygit2/pull/859>`_ - Fix speed and windows package regression `#849 <https://github.com/libgit2/pygit2/issues/849>`_ `#857 <https://github.com/libgit2/pygit2/issues/857>`_ `#851 <https://github.com/libgit2/pygit2/pull/851>`_ - Fix deprecation warning `#850 <https://github.com/libgit2/pygit2/pull/850>`_ - Documentation fixes `#855 <https://github.com/libgit2/pygit2/pull/855>`_ - Add Python classifiers to setup.py `#861 <https://github.com/libgit2/pygit2/pull/861>`_ - Speeding up tests in Travis `#854 <https://github.com/libgit2/pygit2/pull/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 <https://github.com/libgit2/pygit2/issues/824>`_ `#826 <https://github.com/libgit2/pygit2/pull/826>`_ `#833 <https://github.com/libgit2/pygit2/pull/833>`_ `#834 <https://github.com/libgit2/pygit2/pull/834>`_ - New support comparing signatures for (in)equality - New ``Submodule.head_id`` `#817 <https://github.com/libgit2/pygit2/pull/817>`_ - New ``Remote.prune(...)`` `#825 <https://github.com/libgit2/pygit2/pull/825>`_ - New ``pygit2.reference_is_valid_name(...)`` `#827 <https://github.com/libgit2/pygit2/pull/827>`_ - New ``AlreadyExistsError`` and ``InvalidSpecError`` `#828 <https://github.com/libgit2/pygit2/issues/828>`_ `#829 <https://github.com/libgit2/pygit2/pull/829>`_ - New ``Reference.raw_name``, ``Reference.raw_shorthand``, ``Tag.raw_name``, ``Tag.raw_message`` and ``DiffFile.raw_path`` `#840 <https://github.com/libgit2/pygit2/pull/840>`_ - Fix decode error in commit messages and signatures `#839 <https://github.com/libgit2/pygit2/issues/839>`_ - Fix, raise error in ``Repository.descendant_of(...)`` if commit doesn't exist `#822 <https://github.com/libgit2/pygit2/issues/822>`_ `#842 <https://github.com/libgit2/pygit2/pull/842>`_ - Documentation fixes `#821 <https://github.com/libgit2/pygit2/pull/821>`_ Breaking changes: - Remove undocumented ``Tag._message``, replaced by ``Tag.raw_message``
This PR updates [pygit2](https://pypi.org/project/pygit2) from **0.27.4** to **0.28.0**. <details> <summary>Changelog</summary> ### 0.28.0 ``` ------------------------- - Upgrade to libgit2 0.28 `878 <https://github.com/libgit2/pygit2/issues/878>`_ - Add binary wheels for Linux `793 <https://github.com/libgit2/pygit2/issues/793>`_ `869 <https://github.com/libgit2/pygit2/pull/869>`_ `874 <https://github.com/libgit2/pygit2/pull/874>`_ `875 <https://github.com/libgit2/pygit2/pull/875>`_ `883 <https://github.com/libgit2/pygit2/pull/883>`_ - New ``pygit2.Mailmap``, see documentation `804 <https://github.com/libgit2/pygit2/pull/804>`_ - New ``Repository.apply(...)`` wraps ``git_apply(..)`` `841 <https://github.com/libgit2/pygit2/issues/841>`_ `843 <https://github.com/libgit2/pygit2/pull/843>`_ - Now ``Repository.merge_analysis(...)`` accepts an optional reference parameter `888 <https://github.com/libgit2/pygit2/pull/888>`_ `891 <https://github.com/libgit2/pygit2/pull/891>`_ - Now ``Repository.add_worktree(...)`` accepts an optional reference parameter `814 <https://github.com/libgit2/pygit2/issues/814>`_ `889 <https://github.com/libgit2/pygit2/pull/889>`_ - Now it's possible to set SSL certificate locations `876 <https://github.com/libgit2/pygit2/issues/876>`_ `879 <https://github.com/libgit2/pygit2/pull/879>`_ `884 <https://github.com/libgit2/pygit2/pull/884>`_ `886 <https://github.com/libgit2/pygit2/pull/886>`_ - Test and documentation improvements `873 <https://github.com/libgit2/pygit2/pull/873>`_ `887 <https://github.com/libgit2/pygit2/pull/887>`_ Breaking changes: - Now ``worktree.path`` returns the path to the worktree directory, not to the `.git` file within `803 <https://github.com/libgit2/pygit2/issues/803>`_ - Remove undocumented ``worktree.git_path`` `803 <https://github.com/libgit2/pygit2/issues/803>`_ ``` </details> <details> <summary>Links</summary> - PyPI: https://pypi.org/project/pygit2 - Changelog: https://pyup.io/changelogs/pygit2/ - Repo: http://github.com/libgit2/pygit2 </details>
Currently the worktree implementation in pygit2 directly re-declares and uses the internal
git_worktree
struct.pygit2/src/worktree.h
Lines 36 to 43 in 8d6940f
It would be nice if we could avoid using this unexposed libgit2 data structure for stability reasons.
For example, building pygit2 against the libgit2 master branch succeeds, however causes silent & dangerous incorrect behaviour due to the definition of
git_worktree
in pygit2 no longer matchinggit_worktree
in libgit2 (a new field,worktree_path
, was added togit_worktree
).https://github.com/libgit2/libgit2/blob/e212011b9872c52f6205d3a30b10f753c3108918/src/worktree.h#L15-L35
Unfortunately, the fields which are currently exposed as the
name
,path
, andgit_path
properties on Worktree objects are not public at all in the libgit2 API. My current thoughts about how to handle this are the following:name
property to returngit_worktree_name(self->worktree)
path
property to returngit_worktree_path(self->worktree)
git_path
property, as it is not exposed in any way from libgit2.This would make it fall more in line with the libgit2-exposed methods, which seems desirable. Alternatively, the required APIs could be added to libgit2 to maintain behaviour between releases.
The text was updated successfully, but these errors were encountered: