-
Make concurrent
Pack.get_rawcalls thread-safe by synchronizing
PackData'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_sha
read 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 in
get_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/refs
world-writable forall. (netliomax25-code, Jelmer Vernooij, #2323) -
parse_shared_repositorynow returns aSharedPerm, and
DiskObjectStore,IndexandGitFiletake ashared_perm
argument 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 to
update_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's
wildmatch()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)