Git 2.34 Release Notes
======================

Updates since Git 2.33
----------------------

UI, Workflows & Features

 * Pathname expansion (like "~username/") learned a way to specify a
   location relative to Git installation (e.g. its $sharedir which is
   $(prefix)/share), with "%(prefix)".

 * Use `ort` instead of `recursive` as the default merge strategy.

 * The userdiff pattern for "java" language has been updated.


Performance, Internal Implementation, Development Support etc.

 * "git bisect" spawned "git show-branch" only to pretty-print the
   title of the commit after checking out the next version to be
   tested; this has been rewritten in C.

 * "git add" can work better with the sparse index.

 * Support for ancient versions of cURL library (pre 7.19.4) has been
   dropped.

 * A handful of tests that assumed implementation details of files
   backend for refs have been cleaned up.

 * trace2 logs learned to show parent process name to see in what
   context Git was invoked.

 * Loading of ref tips to prepare for common ancestry negotiation in
   "git fetch-pack" has been optimized by taking advantage of the
   commit graph when available.

 * Remind developers that the userdiff patterns should be kept simple
   and permissive, assuming that the contents they apply are always
   syntactically correct.

 * The current implementation of GIT_TEST_FAIL_PREREQS is broken in
   that checking for the lack of a prerequisite would not work.  Avoid
   the use of "if ! test_have_prereq X" in a test script.

 * The revision traversal API has been optimized by taking advantage
   of the commit-graph, when available, to determine if a commit is
   reachable from any of the existing refs.


Fixes since v2.33
-----------------

 * Input validation of "git pack-objects --stdin-packs" has been
   corrected.
   (merge 561fa03529 ab/pack-stdin-packs-fix later to maint).

 * Bugfix for common ancestor negotiation recently introduced in "git
   push" code path.
   (merge 82823118b9 jt/push-negotiation-fixes later to maint).

 * "git pull" had various corner cases that were not well thought out
   around its --rebase backend, e.g. "git pull --ff-only" did not stop
   but went ahead and rebased when the history on other side is not a
   descendant of our history.  The series tries to fix them up.
   (merge 6f843a3355 en/pull-conflicting-options later to maint).

 * "git apply" miscounted the bytes and failed to read to the end of
   binary hunks.
   (merge 46d723ce57 jk/apply-binary-hunk-parsing-fix later to maint).

 * "git range-diff" code clean-up.
   (merge c4d5907324 jk/range-diff-fixes later to maint).

 * "git commit --fixup" now works with "--edit" again, after it was
   broken in v2.32.
   (merge 8ef6aad664 jk/commit-edit-fixup-fix later to maint).

 * Use upload-artifacts v1 (instead of v2) for 32-bit linux, as the
   new version has a blocker bug for that architecture.
   (merge 3cf9bb36bf cb/ci-use-upload-artifacts-v1 later to maint).

 * Checking out all the paths from HEAD during the last conflicted
   step in "git rebase" and continuing would cause the step to be
   skipped (which is expected), but leaves MERGE_MSG file behind in
   $GIT_DIR and confuses the next "git commit", which has been
   corrected.
   (merge e5ee33e855 pw/rebase-skip-final-fix later to maint).

 * Various bugs in "git rebase -r" have been fixed.
   (merge f2563c9ef3 pw/rebase-r-fixes later to maint).

 * mmap() imitation used to call xmalloc() that dies upon malloc()
   failure, which has been corrected to just return an error to the
   caller to be handled.
   (merge 95b4ff3931 rs/git-mmap-uses-malloc later to maint).

 * "git diff --relative" segfaulted and/or produced incorrect result
   when there are unmerged paths.
   (merge 8174627b3d dd/diff-files-unmerged-fix later to maint).

 * The delayed checkout code path in "git checkout" etc. were chatty
   even when --quiet and/or --no-progress options were given.
   (merge 7a132c628e mt/quiet-with-delayed-checkout later to maint).

 * "git branch -D <branch>" used to refuse to remove a broken branch
   ref that points at a missing commit, which has been corrected.
   (merge 597a977489 rs/branch-allow-deleting-dangling later to maint).

 * Build update for Apple clang.
   (merge f32c5d3716 cb/makefile-apple-clang later to maint).

 * The parser for the "--nl" option of "git column" has been
   corrected.
   (merge c93ca46cf5 sg/column-nl later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge 1d9c8daef8 ab/bundle-doc later to maint).
   (merge 81483fe613 en/merge-strategy-docs later to maint).
   (merge 626beebdf8 js/log-protocol-version later to maint).
   (merge 00e302da76 cb/builtin-merge-format-string-fix later to maint).
   (merge ad51ae4dc0 cb/ci-freebsd-update later to maint).
   (merge be6444d1ca fc/completion-updates later to maint).
   (merge ff7b83f562 ti/tcsh-completion-regression-fix later to maint).
   (merge 325b06deda sg/make-fix-ar-invocation later to maint).
   (merge bd72824c60 me/t5582-cleanup later to maint).
   (merge f6a5af0f62 ga/send-email-sendmail-cmd later to maint).
   (merge f58c7468cd ab/ls-remote-packet-trace later to maint).
   (merge 0160f7e725 ab/rebase-fatal-fatal-fix later to maint).
   (merge a16eb6b1ff js/maintenance-launchctl-fix later to maint).
   (merge c21b2511c2 jk/t5323-no-pack-test-fix later to maint).
   (merge 5146c2f148 mh/credential-leakfix later to maint).
   (merge 1549577338 dd/t6300-wo-gpg-fix later to maint).
   (merge 66e905b7dd rs/xopen-reports-open-failures later to maint).
