pygit2 1.20.1__tar.gz → 1.21.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pygit2-1.20.1 → pygit2-1.21.0}/AGENTS.md +4 -6
- {pygit2-1.20.1 → pygit2-1.21.0}/AUTHORS.md +5 -4
- {pygit2-1.20.1 → pygit2-1.21.0}/CHANGELOG.md +33 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/Makefile +1 -1
- {pygit2-1.20.1 → pygit2-1.21.0}/PKG-INFO +3 -2
- {pygit2-1.20.1 → pygit2-1.21.0}/README.md +1 -1
- {pygit2-1.20.1 → pygit2-1.21.0}/build.sh +6 -2
- pygit2-1.21.0/mypy-stubtest.ini +28 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/__init__.py +7 -1
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/_build.py +9 -1
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/_run.py +3 -5
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/branches.py +6 -4
- pygit2-1.21.0/pygit2/config.py +1023 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/config.h +1 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/errors.h +41 -2
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/enums.py +4 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/errors.py +13 -3
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/references.py +5 -1
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/repository.py +16 -19
- {pygit2-1.20.1 → pygit2-1.21.0}/pyproject.toml +7 -3
- {pygit2-1.20.1 → pygit2-1.21.0}/setup.py +6 -5
- {pygit2-1.20.1 → pygit2-1.21.0}/src/odb_backend.c +129 -74
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_branch.py +21 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_branch_empty.py +1 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_config.py +168 -13
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_odb_backend.py +79 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_packbuilder.py +1 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_refs.py +20 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/utils.py +1 -1
- pygit2-1.20.1/mypy-stubtest.ini +0 -16
- pygit2-1.20.1/pygit2/config.py +0 -428
- pygit2-1.20.1/setup.cfg +0 -3
- {pygit2-1.20.1 → pygit2-1.21.0}/CONTRIBUTING.md +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/COPYING +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/SPONSORS.md +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/build.ps1 +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/build_tag.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/mypy.ini +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/_libgit2/ffi.pyi +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/_pygit2.pyi +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/blame.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/blob.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/callbacks.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/credentials.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/attr.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/blame.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/buffer.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/callbacks.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/checkout.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/clone.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/commit.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/common.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/describe.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/diff.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/filter.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/graph.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/index.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/indexer.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/merge.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/net.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/oid.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/options.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/pack.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/proxy.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/rebase.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/refspec.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/remote.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/repository.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/revert.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/stash.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/strarray.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/submodule.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/transaction.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/transport.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/decl/types.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/ffi.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/filter.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/index.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/options.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/packbuilder.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/py.typed +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/rebase.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/refspec.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/remotes.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/settings.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/submodules.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/transaction.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pygit2/utils.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/pytest.ini +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/requirements-test.txt +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/requirements-typing.txt +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/requirements-wheel.txt +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/requirements.txt +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/blob.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/branch.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/branch.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/commit.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/diff.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/diff.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/error.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/error.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/filter.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/filter.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/mailmap.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/mailmap.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/note.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/note.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/object.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/object.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/odb.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/odb.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/odb_backend.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/oid.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/oid.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/patch.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/patch.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/pygit2.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/refdb.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/refdb.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/refdb_backend.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/refdb_backend.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/reference.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/reference.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/repository.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/repository.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/revspec.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/revspec.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/signature.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/signature.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/stash.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/tag.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/tree.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/tree.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/treebuilder.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/treebuilder.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/types.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/utils.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/utils.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/walker.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/walker.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/wildmatch.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/wildmatch.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/worktree.c +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/src/worktree.h +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/__init__.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/conftest.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/barerepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/bigrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/binaryfilerepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/blameflagsrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/dirtyrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/emptyrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/encoding.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/gpgsigned.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/submodulerepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/testrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/testrepoformerging.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/testrepopacked.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/trailerrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/data/utf8branchrepo.zip +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/keys/pygit2_empty +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/keys/pygit2_empty.pub +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_apply_diff.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_archive.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_attributes.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_blame.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_blob.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_cherrypick.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_commit.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_commit_gpg.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_commit_trailer.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_credentials.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_describe.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_diff.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_diff_binary.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_errors.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_filter.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_index.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_mailmap.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_merge.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_nonunicode.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_note.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_object.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_odb.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_oid.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_options.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_patch.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_patch_encoding.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_rebase.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_refdb_backend.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_remote.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_remote_prune.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_remote_utf8.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_repository.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_repository_bare.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_repository_custom.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_repository_empty.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_revparse.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_revwalk.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_settings.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_signature.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_status.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_submodule.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_tag.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_transaction.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_tree.py +0 -0
- {pygit2-1.20.1 → pygit2-1.21.0}/test/test_treebuilder.py +0 -0
|
@@ -10,7 +10,7 @@ and a high-level, Pythonic API for repository manipulation.
|
|
|
10
10
|
- **Version**: 1.19.3 (canonical version is defined in `pygit2/_build.py`)
|
|
11
11
|
- **License**: GPLv2 with linking exception (see `COPYING`)
|
|
12
12
|
- **Maintainer**: J. David Ibáñez
|
|
13
|
-
- **Python Support**: 3.11 – 3.
|
|
13
|
+
- **Python Support**: 3.11 – 3.15 and PyPy3 7.3+
|
|
14
14
|
- **libgit2 Version**: 1.9.7
|
|
15
15
|
- **Homepage**: <https://www.pygit2.org/>
|
|
16
16
|
- **Repository**: <https://github.com/libgit2/pygit2>
|
|
@@ -69,7 +69,6 @@ modules:
|
|
|
69
69
|
also copies `git2.dll` into the package (see `BuildWithDLLs`).
|
|
70
70
|
- **`pyproject.toml`** — Build-system requirements, `cibuildwheel`
|
|
71
71
|
configuration, `ruff` settings, and `codespell` settings.
|
|
72
|
-
- **`setup.cfg`** — Legacy pycodestyle configuration.
|
|
73
72
|
- **`pytest.ini`** — pytest configuration (`--capture=no -ra --verbose`,
|
|
74
73
|
`testpaths = test/`).
|
|
75
74
|
- **`mypy.ini`** — mypy configuration with strict settings.
|
|
@@ -240,7 +239,7 @@ GitHub Actions workflows live in `.github/workflows/`:
|
|
|
240
239
|
Allowed to fail (`continue-on-error`); see issue #812.
|
|
241
240
|
- **`lint.yml`** — Runs `ruff format --diff`, `ruff check`, and
|
|
242
241
|
`sh build.sh mypy`.
|
|
243
|
-
- **`wheels.yml`** — Uses `cibuildwheel` (`~=3.
|
|
242
|
+
- **`wheels.yml`** — Uses `cibuildwheel` (`~=4.3.1`) to build wheels for Linux
|
|
244
243
|
(amd64, arm64, ppc64le and riscv64 via QEMU, musl), macOS (intel, arm64,
|
|
245
244
|
PyPy), and Windows (x64, x86, arm64). Linux, macOS and Windows jobs cache
|
|
246
245
|
the compiled dependencies between runs. It also builds an sdist, runs a
|
|
@@ -253,12 +252,11 @@ The `cibuildwheel` configuration in `pyproject.toml` pins:
|
|
|
253
252
|
|
|
254
253
|
- `LIBGIT2_VERSION="1.9.7"`
|
|
255
254
|
- `LIBSSH2_VERSION="1.11.1"`
|
|
256
|
-
- `OPENSSL_VERSION="3.5.
|
|
255
|
+
- `OPENSSL_VERSION="3.5.9"`
|
|
257
256
|
|
|
258
257
|
and skips `*musllinux_ppc64le` plus testing on `*-*linux_ppc64le`,
|
|
259
258
|
`*-*linux_riscv64` and `pp*-macosx_arm64`. On Windows it uses the
|
|
260
|
-
`Visual Studio 18 2026` CMake generator for x64/x86 and
|
|
261
|
-
`Visual Studio 17 2022` for ARM64.
|
|
259
|
+
`Visual Studio 18 2026` CMake generator for x64/x86 and ARM64.
|
|
262
260
|
|
|
263
261
|
## Security Considerations
|
|
264
262
|
|
|
@@ -14,9 +14,9 @@ Authors:
|
|
|
14
14
|
Brandon Milton
|
|
15
15
|
Daniel Rodríguez Troitiño
|
|
16
16
|
Brendan Doherty
|
|
17
|
+
Christian Boos
|
|
17
18
|
Peter Rowlands
|
|
18
19
|
Richo Healey
|
|
19
|
-
Christian Boos
|
|
20
20
|
Julien Miotte
|
|
21
21
|
Nick Hynes
|
|
22
22
|
Richard Möhn
|
|
@@ -42,6 +42,7 @@ Authors:
|
|
|
42
42
|
Bernardo Heynemann
|
|
43
43
|
John Szakmeister
|
|
44
44
|
Nabijacz Leweli
|
|
45
|
+
Nicholas Williams
|
|
45
46
|
Simon Cozens
|
|
46
47
|
Vlad Temian
|
|
47
48
|
WANG Xuerui
|
|
@@ -60,6 +61,7 @@ Authors:
|
|
|
60
61
|
David Versmisse
|
|
61
62
|
Grégory Herrero
|
|
62
63
|
Mikhail Yushkovskiy
|
|
64
|
+
Or Hayat
|
|
63
65
|
Robin Stocker
|
|
64
66
|
Rohit Sanjay
|
|
65
67
|
Rémi Duraffort
|
|
@@ -88,6 +90,7 @@ Authors:
|
|
|
88
90
|
Petr Viktorin
|
|
89
91
|
Robert Hölzl
|
|
90
92
|
Ron Cohen
|
|
93
|
+
Roshan Ramani
|
|
91
94
|
Sebastian Böhm
|
|
92
95
|
Sukhman Bhuller
|
|
93
96
|
Thomas Kluyver
|
|
@@ -128,7 +131,6 @@ Authors:
|
|
|
128
131
|
Michael Sondergaard
|
|
129
132
|
Michal Koutný
|
|
130
133
|
Natanael Arndt
|
|
131
|
-
Nick Williams
|
|
132
134
|
Ondřej Nový
|
|
133
135
|
Sarath Lakshman
|
|
134
136
|
Steve Kieffer
|
|
@@ -201,6 +203,7 @@ Authors:
|
|
|
201
203
|
Kyriakos Oikonomakos
|
|
202
204
|
Lance Eftink
|
|
203
205
|
Legorooj
|
|
206
|
+
Logan Hunt
|
|
204
207
|
Lukas Berk
|
|
205
208
|
Marius Gedminas
|
|
206
209
|
Martin von Zweigbergk
|
|
@@ -218,7 +221,6 @@ Authors:
|
|
|
218
221
|
Nikolai Zujev
|
|
219
222
|
Nils Philippsen
|
|
220
223
|
Noah Fontes
|
|
221
|
-
Or Hayat
|
|
222
224
|
Óscar San José
|
|
223
225
|
Patrick Lühne
|
|
224
226
|
Paul Wagland
|
|
@@ -229,7 +231,6 @@ Authors:
|
|
|
229
231
|
Remy Suen
|
|
230
232
|
Ridge Kennedy
|
|
231
233
|
Rodrigo Bistolfi
|
|
232
|
-
Roshan Ramani
|
|
233
234
|
Ross Nicoll
|
|
234
235
|
Rui Abreu Ferreira
|
|
235
236
|
Rui Chen
|
|
@@ -1,3 +1,36 @@
|
|
|
1
|
+
# 1.21.0 (2026-11-04)
|
|
2
|
+
|
|
3
|
+
- Add support for Python 3.15
|
|
4
|
+
[#1498](https://github.com/libgit2/pygit2/pull/1498)
|
|
5
|
+
|
|
6
|
+
- New `Config` subclasses: `DefaultConfig` for the default configuration and
|
|
7
|
+
`RepositoryConfig` for repository configurations
|
|
8
|
+
[#1501](https://github.com/libgit2/pygit2/pull/1501)
|
|
9
|
+
|
|
10
|
+
- Fix `ConfigEntry` retaining `git_config_entry` pointers owned by config
|
|
11
|
+
iterators, which could make entry values change unexpectedly and cause
|
|
12
|
+
crashes; values are now copied eagerly
|
|
13
|
+
[#1499](https://github.com/libgit2/pygit2/pull/1499)
|
|
14
|
+
|
|
15
|
+
- Fix custom ODB backends: acquire the GIL when calling back into Python,
|
|
16
|
+
and fix `write_cb`'s type argument
|
|
17
|
+
[#1496](https://github.com/libgit2/pygit2/pull/1496)
|
|
18
|
+
|
|
19
|
+
- Fix `References.get()`, `Branches.get()`, and the `in` operator on both
|
|
20
|
+
collections raising `InvalidSpecError` for invalid names; they now return
|
|
21
|
+
`None` and `False` respectively, as documented
|
|
22
|
+
[#1495](https://github.com/libgit2/pygit2/pull/1495)
|
|
23
|
+
|
|
24
|
+
- Fix `sh build.sh stubtest`
|
|
25
|
+
[#1492](https://github.com/libgit2/pygit2/pull/1492)
|
|
26
|
+
|
|
27
|
+
- Wheels: Build the bundled libgit2 and libssh2 in Release mode instead of Debug
|
|
28
|
+
[#1497](https://github.com/libgit2/pygit2/pull/1497)
|
|
29
|
+
|
|
30
|
+
- Wheels: Update OpenSSL to 3.5.9
|
|
31
|
+
[#1506](https://github.com/libgit2/pygit2/issues/1506)
|
|
32
|
+
|
|
33
|
+
|
|
1
34
|
# 1.20.1 (2026-09-12)
|
|
2
35
|
|
|
3
36
|
- Update wheels to libgit2 1.9.7
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pygit2
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.21.0
|
|
4
4
|
Summary: Python bindings for libgit2.
|
|
5
5
|
Home-page: https://github.com/libgit2/pygit2
|
|
6
6
|
Maintainer: J. David Ibáñez
|
|
@@ -18,6 +18,7 @@ Classifier: Programming Language :: Python :: 3.11
|
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
20
|
Classifier: Programming Language :: Python :: 3.14
|
|
21
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
21
22
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
22
23
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
23
24
|
Classifier: Topic :: Software Development :: Version Control
|
|
@@ -44,7 +45,7 @@ Dynamic: summary
|
|
|
44
45
|
# pygit2 - libgit2 bindings in Python
|
|
45
46
|
|
|
46
47
|
Bindings to the libgit2 shared library, implements Git plumbing.
|
|
47
|
-
Supports Python 3.11 to 3.
|
|
48
|
+
Supports Python 3.11 to 3.15 and PyPy3 7.3+
|
|
48
49
|
|
|
49
50
|
[![test-ci-badge][test-ci-badge]][test-ci-link]
|
|
50
51
|
[![deploy-ci-badge][deploy-ci-badge]][deploy-ci-link]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# pygit2 - libgit2 bindings in Python
|
|
2
2
|
|
|
3
3
|
Bindings to the libgit2 shared library, implements Git plumbing.
|
|
4
|
-
Supports Python 3.11 to 3.
|
|
4
|
+
Supports Python 3.11 to 3.15 and PyPy3 7.3+
|
|
5
5
|
|
|
6
6
|
[![test-ci-badge][test-ci-badge]][test-ci-link]
|
|
7
7
|
[![deploy-ci-badge][deploy-ci-badge]][deploy-ci-link]
|
|
@@ -83,11 +83,12 @@ if [ "$CIBUILDWHEEL" = "1" ]; then
|
|
|
83
83
|
fi
|
|
84
84
|
fi
|
|
85
85
|
|
|
86
|
-
# Use cached dependencies if they match the requested versions.
|
|
86
|
+
# Use cached dependencies if they match the requested versions and build type.
|
|
87
87
|
if [ -f ci/versions.txt ] && \
|
|
88
88
|
grep -q "^LIBGIT2_VERSION=$LIBGIT2_VERSION$" ci/versions.txt && \
|
|
89
89
|
grep -q "^LIBSSH2_VERSION=$LIBSSH2_VERSION$" ci/versions.txt && \
|
|
90
|
-
grep -q "^OPENSSL_VERSION=$OPENSSL_VERSION$" ci/versions.txt
|
|
90
|
+
grep -q "^OPENSSL_VERSION=$OPENSSL_VERSION$" ci/versions.txt && \
|
|
91
|
+
grep -q "^BUILD_TYPE=$BUILD_TYPE$" ci/versions.txt; then
|
|
91
92
|
echo "Using cached dependencies"
|
|
92
93
|
exit 0
|
|
93
94
|
fi
|
|
@@ -163,6 +164,7 @@ if [ -n "$LIBSSH2_VERSION" ]; then
|
|
|
163
164
|
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
|
164
165
|
-DBUILD_SHARED_LIBS=ON \
|
|
165
166
|
-DBUILD_EXAMPLES=OFF \
|
|
167
|
+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
|
166
168
|
-DCMAKE_OSX_ARCHITECTURES="$ARCH" \
|
|
167
169
|
-DBUILD_TESTING=OFF
|
|
168
170
|
else
|
|
@@ -170,6 +172,7 @@ if [ -n "$LIBSSH2_VERSION" ]; then
|
|
|
170
172
|
-DCMAKE_INSTALL_PREFIX=$PREFIX \
|
|
171
173
|
-DBUILD_SHARED_LIBS=ON \
|
|
172
174
|
-DBUILD_EXAMPLES=OFF \
|
|
175
|
+
-DCMAKE_BUILD_TYPE=$BUILD_TYPE \
|
|
173
176
|
-DBUILD_TESTING=OFF
|
|
174
177
|
fi
|
|
175
178
|
cmake --build . --target install
|
|
@@ -216,6 +219,7 @@ if [ "$CIBUILDWHEEL" = "1" ]; then
|
|
|
216
219
|
LIBGIT2_VERSION=$LIBGIT2_VERSION
|
|
217
220
|
LIBSSH2_VERSION=$LIBSSH2_VERSION
|
|
218
221
|
OPENSSL_VERSION=$OPENSSL_VERSION
|
|
222
|
+
BUILD_TYPE=$BUILD_TYPE
|
|
219
223
|
EOF
|
|
220
224
|
if [ "$KERNEL" = "Darwin" ]; then
|
|
221
225
|
echo "PREFIX " $PREFIX
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Config file for testing the stub file (_pygit2.pyi) with "stubtest"
|
|
2
|
+
# (tool shipped with mypy).
|
|
3
|
+
#
|
|
4
|
+
# Run "build.sh stubtest", or:
|
|
5
|
+
# stubtest --mypy-config-file test/mypy-stubtest.ini pygit2._pygit2
|
|
6
|
+
#
|
|
7
|
+
# Format info:
|
|
8
|
+
# https://mypy.readthedocs.io/en/stable/config_file.html
|
|
9
|
+
|
|
10
|
+
[mypy]
|
|
11
|
+
warn_unused_configs = True
|
|
12
|
+
disallow_any_explicit = True
|
|
13
|
+
|
|
14
|
+
# don't follow import pygit2 from _pygit2.pyi, we only want to check the pyi file.
|
|
15
|
+
[mypy-pygit2]
|
|
16
|
+
follow_imports = skip
|
|
17
|
+
|
|
18
|
+
# The stub imports names from the package (pygit2.Index) and from the cffi
|
|
19
|
+
# binding stub, so those modules enter the build even though stubtest only
|
|
20
|
+
# reads _pygit2.pyi. disallow_any_explicit above is about the stub under test;
|
|
21
|
+
# applying it to the rest of the package is what stopped stubtest running at
|
|
22
|
+
# all once pygit2/_libgit2/ffi.pyi arrived.
|
|
23
|
+
[mypy-pygit2.*]
|
|
24
|
+
disallow_any_explicit = False
|
|
25
|
+
|
|
26
|
+
# ... except the stub under test, which is the point of the setting.
|
|
27
|
+
[mypy-pygit2._pygit2]
|
|
28
|
+
disallow_any_explicit = True
|
|
@@ -301,7 +301,11 @@ from .callbacks import (
|
|
|
301
301
|
git_fetch_options,
|
|
302
302
|
git_proxy_options,
|
|
303
303
|
)
|
|
304
|
-
from .config import
|
|
304
|
+
from .config import (
|
|
305
|
+
Config,
|
|
306
|
+
DefaultConfig,
|
|
307
|
+
RepositoryConfig,
|
|
308
|
+
)
|
|
305
309
|
from .credentials import *
|
|
306
310
|
from .errors import (
|
|
307
311
|
AlreadyExistsError,
|
|
@@ -606,6 +610,7 @@ __all__ = (
|
|
|
606
610
|
'Branch',
|
|
607
611
|
'CertificateError',
|
|
608
612
|
'Commit',
|
|
613
|
+
'DefaultConfig',
|
|
609
614
|
'Diff',
|
|
610
615
|
'DiffDelta',
|
|
611
616
|
'DiffFile',
|
|
@@ -941,6 +946,7 @@ __all__ = (
|
|
|
941
946
|
'Remote',
|
|
942
947
|
'repository',
|
|
943
948
|
'Repository',
|
|
949
|
+
'RepositoryConfig',
|
|
944
950
|
'branches',
|
|
945
951
|
'references',
|
|
946
952
|
'settings',
|
|
@@ -34,7 +34,7 @@ from pathlib import Path
|
|
|
34
34
|
#
|
|
35
35
|
# The version number of pygit2
|
|
36
36
|
#
|
|
37
|
-
__version__ = '1.
|
|
37
|
+
__version__ = '1.21.0'
|
|
38
38
|
|
|
39
39
|
|
|
40
40
|
#
|
|
@@ -70,5 +70,13 @@ def get_libgit2_paths() -> tuple[Path, dict[str, list[str]]]:
|
|
|
70
70
|
'libraries': ['git2'],
|
|
71
71
|
'include_dirs': [str(x) for x in include_dirs],
|
|
72
72
|
'library_dirs': [str(x) for x in library_dirs],
|
|
73
|
+
# For debugging memory issues (segfaults) during development, uncomment the
|
|
74
|
+
# following lines and rebuild everything. YMMV
|
|
75
|
+
# 'extra_compile_args': [
|
|
76
|
+
# '-fsanitize=address',
|
|
77
|
+
# '-fsanitize-address-use-after-scope',
|
|
78
|
+
# '-fsanitize-address-use-odr-indicator',
|
|
79
|
+
# ],
|
|
80
|
+
# 'extra_link_args': ['-fsanitize=address'],
|
|
73
81
|
},
|
|
74
82
|
)
|
|
@@ -24,11 +24,10 @@
|
|
|
24
24
|
# Boston, MA 02110-1301, USA.
|
|
25
25
|
|
|
26
26
|
"""
|
|
27
|
-
This is
|
|
27
|
+
This is a special module, it provides stuff used by pygit2 at run-time.
|
|
28
28
|
"""
|
|
29
29
|
|
|
30
30
|
# Import from the Standard Library
|
|
31
|
-
import codecs
|
|
32
31
|
import sys
|
|
33
32
|
from pathlib import Path
|
|
34
33
|
|
|
@@ -89,9 +88,8 @@ h_files = [
|
|
|
89
88
|
]
|
|
90
89
|
h_source = []
|
|
91
90
|
for h_file in h_files:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
h_source.append(f.read())
|
|
91
|
+
h_path = dir_path / 'decl' / h_file
|
|
92
|
+
h_source.append(h_path.read_text(encoding='utf-8'))
|
|
95
93
|
|
|
96
94
|
C_HEADER_SRC = '\n'.join(h_source)
|
|
97
95
|
|
|
@@ -28,7 +28,7 @@ from __future__ import annotations
|
|
|
28
28
|
from collections.abc import Iterator
|
|
29
29
|
from typing import TYPE_CHECKING
|
|
30
30
|
|
|
31
|
-
from ._pygit2 import Branch, Commit, Oid
|
|
31
|
+
from ._pygit2 import Branch, Commit, InvalidSpecError, Oid
|
|
32
32
|
from .enums import BranchType, ReferenceType
|
|
33
33
|
|
|
34
34
|
# Need BaseRepository for type hints, but don't let it cause a circular dependency
|
|
@@ -72,11 +72,13 @@ class Branches:
|
|
|
72
72
|
|
|
73
73
|
return branch
|
|
74
74
|
|
|
75
|
-
def get(self, key: str) -> Branch:
|
|
75
|
+
def get(self, key: str) -> Branch | None:
|
|
76
76
|
try:
|
|
77
77
|
return self[key]
|
|
78
|
-
except KeyError:
|
|
79
|
-
|
|
78
|
+
except (KeyError, InvalidSpecError):
|
|
79
|
+
# As in References.get: git_branch_lookup reports
|
|
80
|
+
# GIT_EINVALIDSPEC for a name that is not a valid branch name.
|
|
81
|
+
return None
|
|
80
82
|
|
|
81
83
|
def __iter__(self) -> Iterator[str]:
|
|
82
84
|
for branch_name in self._repository.listall_branches(self._flag):
|