Git v2.49 Release Notes
=======================

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

 * Completion script updates for zsh

 * "git pack-objects" and its wrapper "git repack" learned an option
   to use an alternative path-hash function to improve delta-base
   selection to produce a packfile with deeper history than window
   size.

 * "git gc" learned the "--expire-to" option and passes it down to
   underlying "git repack".

 * "[help] autocorrect = 1" used to be a way to say "please wait for
   0.1 second after suggesting a typofix of the command name before
   running that command"; now it means "yes, if there is a plausible
   typofix for the command name, please run it immediately".


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

 * More -Wsign-compare fixes.

 * meson-based build now supports the unsafe-sha1 build knob.

 * The code to check LSan results has been simplified and made more
   robust.
   (merge 164a2516eb jk/lsan-race-ignore-false-positive later to maint).

 * More code paths have a repository passed through the callchain,
   instead of assuming the primary the_repository object.

 * Move a few more unit tests to the clar test framework.

 * Introduce a new API to visit objects in batches based on a common
   path, or by type.

 * Following the procedure we established to introduce breaking
   changes for Git 3.0, allow an early opt-in for removing support of
   $GIT_DIR/branches/ and $GIT_DIR/remotes/ directories to configure
   remotes.

 * The code paths to interact with zlib has been cleaned up in
   preparation for building with zlib-ng.

 * Foreign language interface for Rust into our code base has been added.



Fixes since v2.48
-----------------

 * "git submodule" learned various ways to spell the same option,
   e.g. "--branch=B" can be spelled "--branch B" or "-bB".
   (merge b86f0f9071 re/submodule-parse-opt later to maint).

 * Tweak the help text used for the option value placeholders by
   parse-options API so that translations can customize the "<>"
   placeholder signal (e.g. "--option=<value>").
   (merge 5b34dd08d0 as/long-option-help-i18n later to maint).

 * CI jobs gave sporadic failures, which turns out that that the
   object finalization code was giving an error when it did not have
   to.
   (merge d7fcbe2c56 ps/object-collision-check later to maint).

 * The code to compute "unique" name used git_rand() which can fail or
   get stuck; the callsite does not require cryptographic security.
   Introduce the "insecure" mode and use it appropriately.
   (merge 0b4f8afef6 ps/reftable-get-random-fix later to maint).

 * A misconfigured "fsck.skiplist" configuration variable was not
   diagnosed as an error, which has been corrected.
   (merge ca7158076f jt/fsck-skiplist-parse-fix later to maint).

 * Extended SHA-1 expression parser did not work well when a branch
   with an unusual name (e.g. "foo{bar") is involved.
   (merge 191f0c8db2 en/object-name-with-funny-refname-fix later to maint).

 * The meson build procedure looked for the 'version-def.h' file in a
   wrong directory, which has been corrected.
   (merge 4771501c0a tc/meson-use-our-version-def-h later to maint).

 * The meson build procedure for Documentation/technical/ hierarchy was
   missing necessary dependencies, which has been corrected.
   (merge 1dca492edd sj/meson-doc-technical-dependency-fix later to maint).

 * The "instaweb" bound only to local IP address without "--local" and
   to all addresses with "--local", which was the other way around, when
   using Python's http.server class, which has been corrected.
   (merge 76baf97fa1 ak/instaweb-python-port-binding-fix later to maint).

 * Document that it is insecure to use Personal Access Tokens, which
   some hosting providers take as username/password, embedded in URLs.
   (merge a90ff409f0 mh/doc-credential-helpers-with-pat later to maint).

 * The help text from "git $cmd -h" appear on the standard output for
   some $cmd and the standard error for others.  The built-in commands
   have been fixed to show them on the standard output consistently.
   (merge f66d1423f5 jc/show-usage-help later to maint).

 * The meson-driven build is now aware of "git-subtree" housed in
   contrib/subtree hierarchy.
   (merge 8454b42f94 ps/build-meson-subtree later to maint).

 * It was possible for "git unpack-objects" and "git index-pack" to
   make an unaligned access, which has been corrected.
   (merge 98046591b9 jk/pack-header-parse-alignment-fix later to maint).

 * The "cache" credential back-end did not handle authtype correctly,
   which has been corrected.
   (merge 0b43274850 mh/credential-cache-authtype-request-fix later to maint).

 * "git branch --sort=..." and "git for-each-ref --format=... --sort=..."
   did not work as expected with some atoms, which has been corrected.
   (merge c5490ce9d1 rs/ref-fitler-used-atoms-value-fix later to maint).

 * reflog entries for symbolic ref updates were broken, which has been
   corrected.
   (merge 3519492430 kn/reflog-symref-fix later to maint).

 * The trace2 code was not prepared to show a configuration variable
   that is set to true using the valueless true syntax, which has been
   corrected.
   (merge 2fd367cf63 am/trace2-with-valueless-true later to maint).

 * The "git refs migrate" command did not migrate the reflog for
   refs/stash, which is the contents of the stashes, which has been
   corrected.
   (merge a0bea0978f ps/reflog-migration-with-logall-fix later to maint).

 * Doc and short-help text for "show-index" has been clarified to
   stress that the command reads its data from the standard input.
   (merge 49edce4ff9 jc/show-index-h-update later to maint).

 * The API around choosing to use unsafe variant of SHA-1
   implementation has been updated in an attempt to make it harder to
   abuse.
   (merge 04292c3796 tb/unsafe-hash-cleanup later to maint).

 * Fix bugs in an earlier attempt to fix "git refs migration".
   (merge f11f0a5a2d kn/reflog-migration-fix-fix later to maint).

 * The code path used when "git fetch" fetches from a bundle file
   closed the same file descriptor twice, which sometimes broke things
   unexpectedly when the file descriptor was reused, which has been
   corrected.
   (merge 9a84794ad8 js/bundle-unbundle-fd-reuse-fix later to maint).

 * "git init" to reinitialize a repository that already exists cannot
   change the hash function and ref backends; such a request is
   silently ignored now.
   (merge 7e88640cd1 ps/setup-reinit-fixes later to maint).

 * "git apply" internally uses unsigned long for line numbers and uses
   strtoul() to parse numbers on the hunk headers.  It however forgot
   to check parse errors.
   (merge a206058fda pw/apply-ulong-overflow-check later to maint).

 * Two CI tasks, whitespace check and style check, work on the
   difference from the base version and the version being checked, but
   the base was computed incorrectly in GitLab CI in some cases, which
   has been corrected.
   (merge acc4fb302b jt/gitlab-ci-base-fix later to maint).

 * "git repack --keep-unreachable" to send unreachable objects to the
   main pack "git repack -ad" produces did not work when there is no
   existing packs, which has been corrected.
   (merge 414c82300a ps/repack-keep-unreachable-in-unpacked-repo later to maint).

 * Other code cleanup, docfix, build fix, etc.
   (merge ddb5287894 jk/t7407-use-test-grep later to maint).
   (merge 21e1b44865 aj/difftool-config-doc-fix later to maint).
   (merge 6a63995335 mh/gitattr-doc-markup-fix later to maint).
   (merge 43850dcf9c sk/unit-test-hash later to maint).
   (merge 4ad47d2de3 jc/cli-doc-option-and-config later to maint).
   (merge 2d0ff147e5 jp/t8002-printf-fix later to maint).
   (merge 69666e6746 ja/doc-restore-markup-update later to maint).
   (merge d11d003ba5 sk/strlen-returns-size_t later to maint).
   (merge 77b2d29e91 ja/doc-notes-markup-updates later to maint).
   (merge 6979bf6f8f jk/combine-diff-cleanup later to maint).
   (merge 8705c9bd13 kn/pack-write-with-reduced-globals later to maint).
   (merge 087740d65a ps/leakfixes-0129 later to maint).
   (merge 6bba6f604b jp/doc-trailer-config later to maint).
