| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| dulwich-1.2.13 source code.tar.gz | 2026-08-24 | 1.4 MB | |
| dulwich-1.2.13 source code.zip | 2026-08-24 | 1.6 MB | |
| README.md | 2026-08-24 | 4.6 kB | |
| Totals: 3 Items | 3.0 MB | 2 | |
-
Make concurrent
Pack.get_rawcalls thread-safe by synchronizingPackData's resolved-object offset cache. (Bojan Zivanovic) -
Speed up cached
PackData.get_object_atlookups by acquiring the offset-cache lock directly instead of through awithstatement. (Bojan Zivanovic) -
Bound fetch negotiation the way C Git's
MAX_IN_VAINdoes: give up after 256 unacknowledged "have" lines instead of draining the whole graph walker into stateless (HTTP) requests. (Bojan Zivanovic, [#2343]) -
Add
repo.sanitize_user_identity, which builds an identity from a name and an email sanitized the way git'sfmt_identdoes, for callers who cannot reject invalid input viacheck_user_identity. (Bojan Zivanovic, [#2342]) -
Make concurrent
PackDatareads thread-safe by mmap-ing pack contents and indexing the mapping at explicit offsets instead of sharing the file position. Newunpack_object_at,read_pack_header_at,read_zlib_chunks_at,take_msb_bytes_atandcompute_buffer_sharead from a buffer; the existing read-callable variants remain for streams. (Bojan Zivanovic, Jelmer Vernooij) -
Deduplicate the commit walk in
find_shallowandget_depth(dulwich.object_store). Both re-expanded a commit once per path that reached it, so a merge-heavy history walked in exponential time. (netliomax25-code) -
SECURITY: Don't follow symlinks when writing messages in
porcelain.format_patch,mbox.split_mboxandmbox.split_maildir. A symlink pre-planted at an output filename was followed, writing the message outside the output directory. (Jelmer Vernooij; Reported by wzc) -
Only reject reserved Windows device names (
aux,nul,con, ...) when actually running on Windows. C git confines this check to its Windows compat layer, so repositories carrying such paths could not be cloned elsewhere. (Jelmer Vernooij, [#2351]) -
Fix
ignoreandattrsmatching for patterns ending in**/. The trailing slash was dropped when translating the pattern, sofoo/**/also matchedfoo/itself and every file directly inside it. Git only ignores the directories belowfoo. (adarshsm) -
Catch
PackFileDisappearedin the bitmap probe inget_reachability_provider, which only guardedFileNotFoundError. (Jelmer Vernooij, [#2344]) -
SECURITY: Widen modes for
core.sharedRepositoryas git does rather than chmodding to a precomputed one, which left.git/hooksand.git/refsworld-writable forall. (netliomax25-code, Jelmer Vernooij, [#2323]) -
parse_shared_repositorynow returns aSharedPerm, andDiskObjectStore,IndexandGitFiletake ashared_permargument in place offile_mode/dir_mode. (Jelmer Vernooij) -
Fix commit-graph extra edge indexing: the stored value is a position in a list of 4-byte entries, not a byte offset, so every octopus merge after the first got a wrong parent list. (netliomax25-code)
-
Refresh the mtime of an existing loose object in
DiskObjectStore.add_object(), so that a concurrentgit gccannot prune an object that was just reported as present. (Bojan Zivanovic, [#2340]) -
HARDEN: Validate shallow object ids received from the remote. (netliomax25-code)
-
SECURITY: Refuse patch targets addressing the
.gitcontrol directory.apply_patches(viaporcelain.am/apply_patch) previously wrote and ran.git/hooks/pre-commit. (Jelmer Vernooij, reported by @bhaswanthc) -
Extend the
verify_leading_dirssymlink guard toupdate_working_tree(used bypull,mergeandcheckout). The 1.2.12 fix only coveredbuild_index_from_tree, so a tree pairing a symlinkxwith a descendantx/configcould still write through the link and overwrite.git/configon pull. (Jelmer Vernooij, reported by Hugh Lewis) -
Translate
.gitignore/.gitattributesbracket expressions with Git'swildmatch()semantics:[^...]negation, POSIX classes, backslash escapes and malformed-class handling.ignoreandattrsnow share one translator, the new publicdulwich.wildmatch. (Vincent Gao, [#2326]) -
Always single-quote the repository path in the SSH command, matching git's
sq_quote().shlex.quoteleft paths without shell metacharacters bare, which broke cloning from servers that parse the command themselves rather than handing it to a shell, such as Bitbucket Server. (Jelmer Vernooij, [#2319])