Skip to content

Releases: jelmer/dulwich

dulwich 1.2.5

28 May 21:42

Choose a tag to compare

This is a security release. All users are encouraged to upgrade.

Security fixes

  • GHSA-gfhv-vqv2-4544 -- Validate submodule paths in porcelain.submodule_update (and thus porcelain.clone(recurse_submodules=True)). A crafted upstream repository could carry a submodule whose path was .git/hooks (or any other path inside .git or above the work tree), causing the submodule's tree contents to be written there with their executable bits intact. The dulwich analogue of git's CVE-2024-32002 / CVE-2024-32004. (Reported by tonghuaroot)

  • CVE-2026-42305 -- Harden tree path validation against entry names that are harmless on POSIX but dangerous when checked out on Windows. validate_path_element_ntfs now also rejects Windows path separators, the alternate data stream marker :, NTFS 8.3 short-name aliases of .git, and reserved Windows device names. core.protectNTFS now defaults to true on every platform, and both core.protectNTFS and core.protectHFS are now read under their correct option names. (Reported by Christopher Toth)

  • CVE-2026-42563 -- Shell-quote values substituted into ProcessMergeDriver commands. A malicious branch could inject shell commands when a merge driver referencing %P was configured. (Reported by Ravishanker Kusuma (hayageek))

  • CVE-2026-47712 -- Sanitize commit subjects used in porcelain.format_patch filenames so a malicious subject (e.g. x/../../x) cannot direct the generated patch outside outdir. (Reported by Christopher Toth)

  • receive.maxInputSize -- Honour receive.maxInputSize in ReceivePackHandler. Previously a remote unauthenticated client could send a tiny crafted pack that declared a huge dest_size and trigger hundreds of MB of allocation over git-receive-pack. (Reported by Liyi, Ziyue, Strick, Maurice and Chenchen @ University of Sydney)

dulwich-1.2.4

21 May 19:23

Choose a tag to compare

Tolerate ref names with empty path components (e.g. `refs/tags//v1.0`) for now, emitting a `DeprecationWarning` rather than raising a `RefFormatError`. Such names are constructed by older Poetry releases (fixed in Poetry 2.4.0) and were silently accepted before Dulwich 1.2.3. `local_branch_name`, `local_tag_name` and `local_replace_name` likewise warn about, and strip, a leading slash instead of raising `ValueError`. Both will become errors again in a future release. (Jelmer Vernooij, #2192)

dulwich-1.2.1

29 Apr 14:41

Choose a tag to compare

Changes since 1.2.0

  • Derive the LFS endpoint as the remote's on-disk LFS store
    (<remote>/.git/lfs for worktrees, <remote>/lfs for bare repos)
    when remote.origin.url points at a local filesystem path or
    file:// URL, matching git-lfs behaviour. Previously the built-in
    smudge filter constructed an HTTP-style <remote>.git/info/lfs path
    that did not exist on disk, leaving LFS-tracked files as pointers
    when cloning from a local repo.

  • Deduplicate objects when writing a multi-pack-index. Objects present
    in multiple packs (e.g. after git gc creates a cruft pack) would
    otherwise produce an OIDL chunk with repeated SHAs, causing
    git multi-pack-index verify to fail with "oid lookup out of order".
    (#2152)

  • Extend ignorecase and precomposeunicode support to index lookups.
    (#1807)

1.2.0

21 Apr 16:41

Choose a tag to compare

Notable changes since 1.1.0

New features

  • Add am command and porcelain.am() for applying mailbox-style email patches (git am), with state persistence for --continue, --skip, --abort, and --quit recovery (#1692).
  • Add apply command and porcelain.apply_patch() for applying unified diffs, including rename/copy detection, binary patches with Git's base85 encoding, and --3way merge fallback (#1784).
  • Expand log command options: --oneline, --abbrev-commit, --author, --committer, --grep, --since/--after, --until/--before, -n/--max-count, --no-merges, --merges, --stat, -p/--patch, --name-only, and --follow (#1779).
  • Add support for push options (-o/--push-option) in push, enabling AGit flow and other server-side push option workflows.
  • Add missing push options: --all, --tags, --delete, --dry-run, --prune, --set-upstream, --follow-tags, and --mirror (#1844).
  • Add support for atomic push operations (--atomic): either all ref updates succeed or none are applied (#1781).
  • Add support for extensions.relativeworktrees repository extension, allowing worktrees to use relative paths (#2112).

Configuration support

  • gc.pruneExpire — grace period before unreachable objects are pruned (#1859).
  • core.precomposeunicode — normalize NFD Unicode paths from macOS filesystems to NFC (#1804).
  • core.gitProxy — proxy command for git:// protocol connections (#1850).
  • core.maxStat — limit stat operations when checking for unstaged changes (#1853).
  • core.packedGitLimit — cap memory used for mmapped pack files, closing LRU packs when exceeded (#1848).
  • core.deltaBaseCacheLimit — cap memory used for caching delta base objects; defaults to 96 MiB (#1849).
  • http.userAgent — customize the User-Agent header (global and URL-specific); default is git/dulwich/{version}.

Fixes

  • Fix GPG signature verification to raise BadSignature for all GPG errors, not just BadSignatures; also detect when GPG returns no signatures.
  • Fix client incorrectly sending unborn argument in Git protocol v2 ls-refs requests to servers that don't advertise ls-refs=unborn, preventing clones from older servers like Gerrit 3.12.2 (#2104).
  • Improve error message in read_info_refs() to show the actual line content when parsing fails (#2103).
  • Preserve quoted trailing whitespace in config values (#2145, Christopher Toth).
  • Fix .gitignore parent re-include handling so a later !dir/ re-include allows a subsequent file-level negation to take effect (#2141, N0zoM1z0).
  • Fix host key verification in contrib/paramiko_vendor.py by loading known hosts and rejecting unknown SSH host keys by default (#2123, quart27219).

Packaging

  • No longer ship contrib/ as part of the distribution. The contrib/ directory has always been documented as unsupported and is now excluded from the installed package (#2122).

dulwich-0.23.0

21 Jun 17:48

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: dulwich-0.22.8...dulwich-0.23.0

1.1.0

17 Feb 23:13

Choose a tag to compare

What's Changed

  • Add reference to c-git-compatibility doc in README.md by @jelmer in #2069
  • Implement cli commands for more porcelain by @jelmer in #2071
  • Support GIT_TRACE_PACKET by @jelmer in #2073
  • Fix cloning of SHA-256 repositories with protocol v2 by @jelmer in #2074
  • skip tests that require merge3 when it's not available by @kulikjak in #2075
  • Add test-minimal to CI; run tests without installing any optional dependencies by @jelmer in #2076
  • Update SECURITY.md by @jelmer in #2077
  • Don't skip 3.14 wheels by @bowiechen in #2078
  • Add Git protocol v2 packfile-uris client support by @jelmer in #2079
  • Attempt to fix occasional issues with long running lfs processes in tests by @jelmer in #2081
  • Allow passing commit and author timestamps into porcelain.commit by @ading2210 in #2080
  • Skip Python 3.14 x86_64/universal2 wheels on macOS by @jelmer in #2082
  • Improve exception message for tags by @jelmer in #2083
  • ci(deps): bump dependabot/fetch-metadata from 2.4.0 to 2.5.0 by @dependabot[bot] in #2084
  • ci(deps): bump actions/checkout from 6.0.1 to 6.0.2 by @dependabot[bot] in #2085
  • deps(deps-dev): bump ruff from 0.14.10 to 0.14.14 in the pip group by @dependabot[bot] in #2086
  • Add bundle URI support for faster clones and fetches by @jelmer in #2087
  • Add basic subtree support by @jelmer in #2088
  • Add support for core.trustctime configuration option by @jelmer in #2091
  • Fix LFS client selection for file:// URLs by @jelmer in #2089
  • Add support for core.commentChar configuration option (#1852) by @jelmer in #2092
  • Add --unshallow support to fetch command by @jelmer in #2093
  • Add progress reporting during pack file downloads by @jelmer in #2094
  • Macos wheels fix by @jelmer in #2095
  • Disable git-lfs filter process in LFS status tests to fix flaky Windows failures by @jelmer in #2096
  • Server side hooks by @jelmer in #2097
  • Fix checkout skipping files with paths starting with '.git' by @jelmer in #2098

New Contributors

Full Changelog: dulwich-1.0.0...dulwich-1.1.0

1.0.0

17 Jan 23:21
dulwich-1.0.0

Choose a tag to compare

What's Changed

Full Changelog: dulwich-0.25.2...dulwich-1.0.0

dulwich-0.25.1

12 Jan 01:56
dulwich-0.25.2

Choose a tag to compare

What's Changed

  • Fix GPG signature test to handle InvalidSigners exception by @jelmer in #2064
  • Make object store close() idempotent and warn on unclosed resources by @jelmer in #2065

Full Changelog: dulwich-0.25.1...dulwich-0.25.2

0.22.6

21 Apr 16:44
953eb0c

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v0.22.2...v0.22.6

dulwich-0.25.1

12 Jan 01:55
dulwich-0.25.1

Choose a tag to compare