Git v2.51 Release Notes
=======================

UI, Workflows & Features
------------------------

 * Userdiff patterns for the R language have been added.

 * Documentation for "git send-email" has been updated with a bit more
   credential helper and OAuth information.

 * "git cat-file --batch" learns to understand %(objectmode) atom to
   allow the caller to tell missing objects (due to repository
   corruption) and submodules (whose commit objects are OK to be
   missing) apart.

 * "git diff --no-index dirA dirB" can limit the comparison with
   pathspec at the end of the command line, just like normal "git
   diff".

 * "git subtree" (in contrib/) learned to grok GPG signing its commits.

 * "git whatchanged" that is longer to type than "git log --raw"
   which is its modern rough equivalent has outlived its usefulness
   more than 10 years ago.  Plan to deprecate and remove it.

 * An interchange format for stash entries is defined, and subcommand
   of "git stash" to import/export has been added.

 * "git merge/pull" has been taught the "--compact-summary" option to
   use the compact-summary format, intead of diffstat, when showing
   the summary of the incoming changes.

 * "git imap-send" has been broken for a long time, which has been
   resurrected and then taught to talk OAuth2.0 etc.

 * Some error messages from "git imap-send" has been updated.

 * When "git daemon" sees a signal while attempting to accept() a new
   client, instead of retrying, it skipped it by mistake, which has
   been corrected.

 * The reftable ref backend has matured enough; Git 3.0 will make it
   the default format in a newly created repositories by default.

 * "netrc" credential helper has been improved to understand textual
   service names (like smtp) in addition to the numeric port numbers
   (like 25).

 * Lift the limitation to use changed-path filter in "git log" so that
   it can be used for a pathspec with multiple literal paths.

 * Clean up the way how signature on commit objects are exported to
   and imported from fast-import stream.

 * Remove unsupported, unused, and unsupportable old option from "git
   log".

 * Document recently added "git imap-send --list" with an example.

 * "git pull" learned to pay attention to pull.autostash configuration
   variable, which overrides rebase/merge.autostash.

 * "git for-each-ref" learns "--start-after" option to help
   applications that want to page its output.

 * "git switch" and "git restore" are declared to be no longer
   experimental.

 * "git -c alias.foo=bar foo -h baz" reported "'foo' is aliased to
   'bar'" and then went on to run "git foo -h baz", which was
   unexpected.  Tighten the rule so that alias expansion is reported
   only when "-h" is the sole option.


Performance, Internal Implementation, Development Support etc.
--------------------------------------------------------------

 * "git pack-objects" learned to find delta bases from blobs at the
   same path, using the --path-walk API.

 * CodingGuidelines update.

 * Add settings for Solaris 10 & 11.

 * Meson-based build/test framework now understands TAP output
   generated by our tests.

 * "Do not explicitly initialize to zero" rule has been clarified in
   the CodingGuidelines document.

 * A test helper "test_seq" function learned the "-f <fmt>" option,
   which allowed us to simplify a lot of test scripts.

 * A lot of stale stuff has been removed from the contrib/ hierarchy.

 * "git push" and "git fetch" are taught to update refs in batches to
   gain performance.

 * Some code paths in "git prune" used to ignore the passed-in
   repository object and used the `the_repository` singleton instance
   instead, which has been corrected.

 * Update ".clang-format" and ".editorconfig" to match our style guide
   a bit better.

 * "make coccicheck" succeeds even when spatch made suggestions, which
   has been updated to fail in such a case.

 * Code clean-up around object access API.

 * Define .precision to more canned parse-options type to avoid bugs
   coming from using a variable with a wrong type to capture the
   parsed values.

 * Flipping the default hash function to SHA-256 at Git 3.0 boundary
   is planned.

 * Declare weather-balloon we raised for "bool" type 18 months ago a
   success and officially allow using the type in our codebase.

 * GIT_TEST_INSTALLED was not honored in the recent topic related to
   SHA256 hashes, which has been corrected.

 * The pop_most_recent_commit() function can have quite expensive
   worst case performance characteristics, which has been optimized by
   using prio-queue data structure.

 * Move structure definition from unrelated header file to where it
   belongs.

 * To help our developers, document what C99 language features are
   being considered for adoption, in addition to what past experiments
   have already decided.

 * The reftable unit tests are now ported to the "clar" unit testing
   framework.

 * Redefine where the multi-pack-index sits in the object subsystem,
   which recently was restructured to allow multiple backends that
   support a single object source that belongs to one repository.  A
   MIDX does span multiple "object sources".

 * Reduce implicit assumption and dependence on the_repository in the
   object-file subsystem.


Fixes since v2.50
-----------------

Unless otherwise noted, all the changes in 2.50.X maintenance track,
including security updates, are included in this release.

 * A memory-leak in an error code path has been plugged.
   (merge 7082da85cb ly/commit-graph-graph-write-leakfix later to maint).

 * A memory-leak in an error code path has been plugged.
   (merge aedebdb6b9 ly/fetch-pack-leakfix later to maint).

 * Some leftover references to documentation source files that no
   longer exist, due to recent ".txt" -> ".adoc" renaming, have been
   corrected.
   (merge 3717a5775a jw/doc-txt-to-adoc-refs later to maint).

 * "git stash -p <pathspec>" improvements.
   (merge 468817bab2 pw/stash-p-pathspec-fixes later to maint).

 * "git send-email" incremented its internal message counter when a
   message was edited, which made logic that treats the first message
   specially misbehave, which has been corrected.
   (merge 2cc27b3501 ag/send-email-edit-threading-fix later to maint).

 * "git stash" recorded a wrong branch name when submodules are
   present in the current checkout, which has been corrected.
   (merge ffb36c64f2 kj/stash-onbranch-submodule-fix later to maint).

 * When asking to apply mailmap to both author and committer field
   while showing a commit object, the field that appears later was not
   correctly parsed and replaced, which has been corrected.
   (merge abf94a283f sa/multi-mailmap-fix later to maint).

 * "git maintenance" lacked the care "git gc" had to avoid holding
   onto the repository lock for too long during packing refs, which
   has been remedied.
   (merge 1b5074e614 ps/maintenance-ref-lock later to maint).

 * Avoid regexp_constraint and instead use comparison_constraint when
   listing functions to exclude from application of coccinelle rules,
   as spatch can be built with different regexp engine X-<.
   (merge f2ad545813 jc/cocci-avoid-regexp-constraint later to maint).

 * Updating submodules from the upstream did not work well when
   submodule's HEAD is detached, which has been improved.
   (merge ca62f524c1 jk/submodule-remote-lookup-cleanup later to maint).

 * Remove unnecessary check from "git daemon" code.
   (merge 0c856224d2 cb/daemon-fd-check-fix later to maint).

 * Use of sysctl() system call to learn the total RAM size used on
   BSDs has been corrected.
   (merge 781c1cf571 cb/total-ram-bsd-fix later to maint).

 * Drop FreeBSD 4 support and declare that we support only FreeBSD 12
   or later, which has memmem() supported.
   (merge 0392f976a7 bs/config-mak-freebsd later to maint).

 * A diff-filter with negative-only specification like "git log
   --diff-filter=d" did not trigger correctly, which has been fixed.
   (merge 375ac087c5 jk/all-negative-diff-filter-fix later to maint).

 * A failure to open the index file for writing due to conflicting
   access did not state what went wrong, which has been corrected.
   (merge 9455397a5c hy/read-cache-lock-error-fix later to maint).

 * Tempfile removal fix in the codepath to sign commits with SSH keys.
   (merge 4498127b04 re/ssh-sign-buffer-fix later to maint).

 * Code and test clean-up around string-list API.
   (merge 6e5b26c3ff sj/string-list later to maint).

 * "git apply -N" should start from the current index and register
   only new files, but it instead started from an empty index, which
   has been corrected.
   (merge 2b49d97fcb rp/apply-intent-to-add-fix later to maint).

 * Leakfix with a new and a bit invasive test on pack-bitmap files.
   (merge bfd5522e98 ly/load-bitmap-leakfix later to maint).

 * "git fetch --prune" used to be O(n^2) expensive when there are many
   refs, which has been corrected.
   (merge 87d8d8c5d0 ph/fetch-prune-optim later to maint).

 * When a ref creation at refs/heads/foo/bar fails, the files backend
   now removes refs/heads/foo/ if the directory is otherwise not used.
   (merge a3a7f20516 ps/refs-files-remove-empty-parent later to maint).

 * "pack-objects" has been taught to avoid pointing into objects in
   cruft packs from midx.

 * "git remote" now detects remote names that overlap with each other
   (e.g., remote nickname "outer" and "outer/inner" are used at the
   same time), as it will lead to overlapping remote-tracking
   branches.
   (merge a5a727c448 jk/remote-avoid-overlapping-names later to maint).

 * The gpg.program configuration variable, which names a pathname to
   the (custom) GPG compatible program, can now be spelled with ~tilde
   expansion.
   (merge 7d275cd5c0 jb/gpg-program-variable-is-a-pathname later to maint).

 * Our <sane-ctype.h> header file relied on that the system-supplied
   <ctype.h> header is not later included, which would override our
   macro definitions, but "amazon linux" broke this assumption.  Fix
   this by preemptively including <ctype.h> near the beginning of
   <sane-ctype.h> ourselves.
   (merge 9d3b33125f ps/sane-ctype-workaround later to maint).

 * Clean-up compat/bswap.h mess.
   (merge f4ac32c03a ss/compat-bswap-revamp later to maint).

 * Meson-based build did not handle libexecdir setting correctly,
   which has been corrected.
   (merge 056dbe8612 rj/meson-libexecdir-fix later to maint).

 * Document that we do not require "real" name when signing your
   patches off.
   (merge 1f0fed312a bc/contribution-under-non-real-names later to maint).

 * "git commit" that concludes a conflicted merge failed to notice and remove
   existing comment added automatically (like "# Conflicts:") when the
   core.commentstring is set to 'auto'.
   (merge 92b7c7c9f5 ac/auto-comment-char-fix later to maint).

 * "git rebase -i" with bogus rebase.instructionFormat configuration
   failed to produce the todo file after recording the state files,
   leading to confused "git status"; this has been corrected.
   (merge ade14bffd7 ow/rebase-verify-insn-fmt-before-initializing-state later to maint).

 * A few file descriptors left unclosed upon program completion in a
   few test helper programs are now closed.
   (merge 0f1b33815b hl/test-helper-fd-close later to maint).

 * Interactive prompt code did not correctly strip CRLF from the end
   of line on Windows.
   (merge 711a20827b js/prompt-crlf-fix later to maint).

 * The config API had a set of convenience wrapper functions that
   implicitly use the_repository instance; they have been removed and
   inlined at the calling sites.

 * "git add/etc -p" now honor the diff.context configuration variable,
   and also they learn to honor the -U<n> command-line option.
   (merge 2b3ae04011 lm/add-p-context later to maint).

 * The case where a new submodule takes a path where there used to be a
   completely different subproject is now dealt with a bit better than
   before.
   (merge 5ed8c5b465 kj/renamed-submodule later to maint).

 * The deflate codepath in "git archive --format=zip" had a
   longstanding bug coming from misuse of zlib API, which has been
   corrected.

 * Other code cleanup, docfix, build fix, etc.
   (merge b257adb571 lo/my-first-ow-doc-update later to maint).
   (merge 8b34b6a220 ly/sequencer-update-squash-is-fixup-only later to maint).
   (merge 5dceb8bd05 ly/do-not-localize-bug-messages later to maint).
   (merge 61372dd613 ly/commit-buffer-reencode-leakfix later to maint).
   (merge 81cd1eef7d ly/pack-bitmap-root-leakfix later to maint).
   (merge bfc9f9cc64 ly/submodule-update-failure-leakfix later to maint).
   (merge 65dff89c6b ma/doc-diff-cc-headers later to maint).
   (merge efb61591ee jm/bundle-uri-debug-output-to-fp later to maint).
   (merge a3d278bb64 ly/prepare-show-merge-leakfix later to maint).
   (merge 1fde1c5daf ac/preload-index-wo-the-repository later to maint).
   (merge 855cfc65ae rm/t2400-modernize later to maint).
   (merge 2939494284 ly/run-builtin-use-passed-in-repo later to maint).
   (merge ff73f375bb jg/mailinfo-leakfix later to maint).
   (merge 996f14c02b jj/doc-branch-markup-fix later to maint).
   (merge 1e77de1864 cb/ci-freebsd-update-to-14.3 later to maint).
   (merge b0e9d25865 jk/fix-leak-send-pack later to maint).
   (merge f3a9558c8c bs/remote-helpers-doc-markup-fix later to maint).
   (merge c4e9775c60 kh/doc-config-subcommands later to maint).
   (merge de404249ab ps/perlless-test-fixes later to maint).
   (merge 953049eed8 ts/merge-orig-head-doc-fix later to maint).
   (merge 0c83bbc704 rj/freebsd-sysinfo-build-fix later to maint).
   (merge ad7780b38f ps/doc-pack-refs-auto-with-files-backend-fix later to maint).
   (merge f4fa8a3687 rh/doc-glob-pathspec-fix later to maint).
   (merge b27be108c8 ja/doc-git-log-markup later to maint).
   (merge 14d7583beb pw/config-kvi-remove-path later to maint).
   (merge f31abb421d jc/do-not-scan-argv-without-parsing later to maint).
   (merge 26552cb62a jk/unleak-reflog-expire-entry later to maint).
   (merge 339d95fda9 jc/ci-print-test-failures-fix later to maint).
   (merge 8c3add51a8 cb/meson-avoid-broken-macos-pcre2 later to maint).
   (merge 5247da07b8 ps/meson-clar-decls-fix later to maint).
   (merge f3ef347bb2 ch/t7450-recursive-clone-test-fix later to maint).
   (merge 4ac3302a1a jc/doc-release-vs-clear later to maint).
   (merge 3bdd897413 ms/meson-with-ancient-git-wo-ls-files-dedup later to maint).
   (merge cca758d324 kh/doc-fast-import-historical later to maint).
   (merge 9b0781196a jc/test-hashmap-is-still-here later to maint).
   (merge 1bad05bacc jk/revert-squelch-compiler-warning later to maint).
   (merge 3a7e783d9c dl/squelch-maybe-uninitialized later to maint).
